ui — iOS原生GUI
介绍
ui
模块提供了用于在iOS上构建“原生”图形用户界面的组件。它是按照Apple的UIKit
紧密建模的,但绝不是一个完整的包装器,它简化了框架的某些方面。
该模块配有一个集成的UI设计工具,该工具可用于安排和配置GUI元素,而无需编写任何代码。
入门
让我们从一个简单的例子开始。以下代码仅显示一个按钮,提示你“Tap me!”。当你点击它时,它将标题更改为“Hello”。
尽管不是很有用,但此示例演示了ui
模块的几个核心概念-基本视图布局,在屏幕上显示视图以及处理事件。
1 | import ui |
让我们更详细地看一下代码:
- 首先,我们创建一个
View
。这是几乎你可以在屏幕上放置的所有内容的基类。一个单纯的View
只是一个彩色的矩形,但它也可以用作其他视图的容器(在这种情况下为一个按钮)。 - 我们将视图的名称设置为“
Demo
”,这是稍后显示视图时在标题栏中显示的名称。 - 视图的背景色设置为’
white
‘。你可以使用字符串(颜色名称和十六进制),元组(例如(1.0,0.0,0.0)
表示红色,(0.0,1.0,0.0,0.5)
表示半透明的绿色)或数字(例如0.5
表示50%的灰色)。在内部,所有这些颜色表示都转换为4元组(r,g,b,a)
,因此,background_color
以后访问视图的background_color
属性时,无论是否设置’white
‘,’#ffffff
‘或1.0
,它都将获得(1.0,1.0,1.0,1.0)
。 - 我们创建一个新的
Button
,使用关键字参数设置其标题。在初始化期间设置标题时,其大小会自动调整为合适。 - 通过设置
View.center
属性,我们可以设置按钮相对于其父按钮的位置。在这种情况下,我们使用父项View.width
和View.height
属性的一半来使按钮居中。 - 由于视图可能会更改其大小(例如,旋转设备时),因此我们设置了
View.flex
控制其自动调整大小行为的按钮属性。在这种情况下,我们希望左,右,上和下边距灵活,以便按钮在其容器中居中。 - 我们将按钮的
Button.action
属性设置为脚本顶部定义的函数。该函数必须接受一个通常称为sender
的参数。参数将是触发事件的按钮,因此你可以对多个按钮使用单个操作,并根据引起事件的按钮来确定要执行的操作。 - 我们已经完成了按钮的设置,因此可以使用
View.add_subview()
方法将其添加为容器视图的子级。 - 最后,我们调用
View.present()
方法以在屏幕上显示主视图。视图可以以不同的样式呈现。在iPhone上,所有的视图都在全屏展示,但在iPad上,你可以选择’sheet
‘,’popover
‘和’fullscreen
‘。
使用UI设计器
如果你经历了上面的示例,你可能会认为这是用很多代码去执行非常基本的操作。通过使用附带的可视UI编辑器,可以大大减少样板代码的数量。
首先在你的媒体库中创建一个新的“User Interface
”文件。然后,你可以将小部件添加到画布,在其周围拖动它们,调整它们的大小,并使用“Attributes...
”检查器配置其他参数。
你可以这样重新创建上面的示例:
- 点击“
+
”添加按钮。 - 将其拖动到画布的中心(它将对齐到自动对齐参考线)。
- 从按钮的上下文菜单中选择“
Edit Title
”,然后输入“Tap me!” (或你喜欢的任何内容)。 - 最后,打开“
Attributes...
”检查器(从按钮的菜单,或通过点击(i)
按钮),然后导航到“Frame / Auto-Resizing
”部分。检查所有页边距(但不检查“Width
”或“Height
”)。这样可以确保按钮在其容器中居中。 - 仍在检查器中,将按钮的动作设置为
button_tapped
(仅函数名称,不带任何括号或参数)。 - 为了使下面的代码按原样工作,请将UI文件重命名为“My UI”。
1 | import ui |
该代码段做的事与第一个示例完全相同,但是代码更少。该按钮的属性已在GUI中设置,剩下代码要做的就是使用load_view()
加载文件,并在屏幕上显示视图。button_tapped
动作和以前一样,但相应的按钮和动作之间的连接也已在加载视图时建立。
注意:button_tapped
函数定义在加载视图之前很重要,因为按钮的动作和代码中的函数之间的连接是在load_view()
调用期间进行的。
动作和代理
大多数简单的控件(如按钮,滑块,开关等)都具有负责处理控件的“主要”事件的action
属性。轻击按钮时调用按钮的动作,对于滑块,当其值改变时调用按钮的动作,等等。
所有操作都是带有单个sender
参数的函数(如果需要,你也可以使用其他名称),它将始终是导致事件的控件/视图。你可以使用此参数来查找有关事件的更多信息,例如,通过sender
获取Switch
或Slider
的更新后的value
属性。
如果你是以面向对象的方式进行编程,则动作也可以是绑定方法,在这种情况下,该方法当然会带有两个参数(self
和sender
)。
你可以通过输入函数或方法名称(不带括号或参数)直接在UI设计工具中配置控件的动作。如果将操作设置为绑定方法,则名称必须以self
开头.(不支持其他对象的方法,尽管你可以通过编程方式执行此操作)。
更复杂的视图,例如TableView
或TextView
通常具有delegate
属性。你可以将代理视为视图对象在某些情况下决定其行为的帮助对象。例如,TextView
每当输入任何文本或选择更改时,通知其代理。它还使代理有机会验证更改,例如拒绝 TextView
或TextField
中的某些字符。
任何对象都可以是代理,只要该类实现文档中描述的方法即可。所有代理方法都是可选的,例如,如果你的文本视图代理未实现textview_should_begin_editing
,则假定始终允许文本视图开始编辑。
实现动作和代理方法时要记住的一件事是,所有回调都在主机应用程序的主(UI)线程上调用。如果你的函数需要很长时间才能返回,则该应用在此期间将显示为“冻结”状态。对于期望具有返回值的代理方法,与UIKit
进行基础交互是必需的。其他回调方法可以使用@ui.in_background
修饰为在后台运行(在常规解释器线程上)。
在以下回调中,console.alert()
被用于按钮的操作。你无法在UI线程上执行此操作,因为在你点击对话框中的按钮之前,console.alert()
函数将一直阻塞,因此该操作用以下字符装饰:@ui.in_background
1 | import ui |
建立自己的视图
通过继承View
,你可以实现自定义触摸处理和绘图。View
是ui
模块中唯一可继承的类,自定义视图可以实现许多方法来定义其行为和外观。
也可以将自定义视图添加到使用UI设计工具直观创建的UI。只需将检查器中的“Custom View Class
”属性设置为你的类的名称(在加载视图时必须定义此名称)。
下面的示例显示了自定义视图可以实现的所有方法。请注意,你不必全部实现它们,例如,如果你没有特殊的布局要求或不想处理触摸,则可以省略layout
和touch_...
方法。
1 | import ui |
视图动画
许多View
属性的变化可以动画化。例如,你可以设置View.frame
属性以平滑的动画更改其大小和位置,或View.alpha
控制淡入/淡出动画。
首先,你必须编写一个函数来描述要应用的更改。这通常是一个内部函数。然后,你可以将此函数的引用传递给animate()
函数,还可以选择传递动画的持续时间和延迟:
1 | import ui |
绘画上下文
ui
模块包含几个用于绘制图像,形状和文本的函数。由于他们需要知道在哪里绘制(在哪个视图中,或绘制成图片…),因此需要在调用它们之前设置绘制上下文。
基本上有两种方法可以做到这一点:
- 当你处于重载的
draw
方法中(在自定义View
子类中)时,已经设置了绘图上下文,并且所有绘图函数都将定向到该视图。 - 当你想要绘制成图片时(例如,用于将图形缓存或保存到磁盘),你必须设置一个
ImageContext
实现为上下文的管理器。一个ImageContext
定义画布大小,并允许你完成绘图时获取所产生的Image
对象。
这是一个在白色背景上绘制一个红色圆圈,然后在控制台中显示生成的图像的示例:
1 | import ui |
API参考——视图类
视图
class ui.View([frame=(0, 0, 100, 100), flex=’’, background_color=None, name=None])
View
类定义了屏幕上的一个矩形区域。视图负责呈现其内容以及在其范围内发生的所有触摸事件。
所有控件(如按钮,文本输入框等)都派生自View
该类,并继承其所有属性和方法,但也可以创建一个普通的View
在屏幕上显示彩色矩形或用作其他视图的容器。
也可以通过子类View
来绘制自定义内容或直接处理触摸事件(有关实现自定义视图的更多信息,请参见构建自定义视图)。
视图具有name属性用于在代码中标识它们(例如,从UI文件加载视图时)。您可以使用类似于字典的语法按名称访问视图的直接子级(子视图),如my_view['subview_name']
。
视图属性
View.alpha
视图的Alpha值是0.0到1.0范围内的浮点数(0.0完全透明,1.0完全不透明)。
View.background_color
视图的背景颜色,默认为无(透明)。
设置此属性时,你可以传递字符串(CSS颜色名称或十六进制,例如’red
‘或’#ff0000
‘),元组(例如(1.0, 0.0, 0.0, 0.5)
代表半透明的红色)或数字(例如0.5
代表50%的灰色)。在内部,所有的颜色都将转换为RGBA元组,所以当你访问颜色后,你会得到(1.0, 1.0, 1.0, 1.0)
,不管你设置颜色为’white
‘,’#ffffff
‘或1.0
。
View.border_color
视图的边框颜色(仅当border_width
> 0时有效)
设置此属性时,你可以传递字符串(CSS颜色名称或十六进制,例如’red
‘或’#ff0000
‘),元组(例如(1.0, 0.0, 0.0, 0.5)
代表半透明的红色)或数字(例如0.5
代表50%的灰色)。在内部,所有的颜色都将转换为RGBA元组,所以当你访问颜色后,你会得到(1.0, 1.0, 1.0, 1.0)
,不管你设置颜色为’white
‘,’#ffffff
‘或1.0
。
View.border_width
视图的边框宽度,默认为零(无边框)
View.bounds
视图在其自己的坐标系中的位置和大小,以4元组 (x, y, width, height)
表示。x
和y
默认情况下为零,但是您可以设置非零值以显示视图的不同部分。该值与frame
属性耦合(一个更改影响另一个)。
View.center
视图frame
的中心,为2元组(x,y)
。
View.content_mode
确定视图的边界改变时如何布置其内容。可以是下面列出的视图常量表中的常量之一。对于自定义View
子类,默认情况下设置为CONTENT_MODE_REDRAW
。
View.corner_radius
视图的角半径。
View.flex
视图的自动调整大小行为。视图更改边界时,它将根据此属性设置的标志自动调整其子视图的大小。
这些标志表示为一串由一个字母组成的“代码”,用于指定应如何调整视图的大小。
有效标志是“W
”(弹性宽度),“H
”(弹性高度),“L
”(弹性左边界),“R
”(弹性右边界),“T
”(弹性的顶部边距),“B
”(弹性的底部边距)。
例子:
“WH
” – 视图的宽度和高度是自动调整的,通常适用于填充整个父级视图。
“TR
” – 视图固定在其父视图的左下角(顶部边距和右边距是灵活的)。
如果您不想自动调整大小,请使用一个空字符串。
View.frame
视图在其父视图的坐标系中的位置和大小。矩形表示为4元组(x, y, width, height)
。
View.height
获取/设置视图frame
的高度部分的快捷方式。
View.hidden
确定视图是否隐藏。隐藏的视图不会收到任何触摸事件。
View.left_button_items
显示时在视图标题栏中左侧显示的一系列ButtonItem
对象。
View.multitouch_enabled
确定视图是否接收多点触摸事件。设置为False
时,视图仅接收多点触摸序列中的第一个触摸事件。通常只有在自定义View
子类中实现触摸处理方法时才有意义。
View.name
标识视图的字符串。它应该是唯一的,但这不是强制性的。您可以使用此字符串将视图视为其子视图的字典,例如,如果view
具有名称的子视图,则button1
可以通过view['button1']
获得子视图。
显示视图时(通过View.present()
),标题栏中还会使用该名称。
View.navigation_view
返回当前显示视图的NavigationView
;如果没有任何导航视图显示,则返回None
。
View.on_screen
(只读)确定视图是否是当前在屏幕上的任何视图层次结构的一部分。
View.right_button_items
显示时在视图标题栏中右侧显示的一系列ButtonItem
对象。
View.subviews
(只读)视图子级的元组。
View.superview
(只读)该视图的父视图。
View.tint_color
视图的着色颜色。如果设置为“None
”(默认值),则着色颜色将从其父视图继承。着色颜色以不同的方式影响各种控件的外观。例如,Button
将着色颜色用作标题,TextView
将着色颜色用作选择控件,等等。
View.touch_enabled
确定视图是否接收到任何触摸事件。将其设置为False
对于不应覆盖下面视图的触摸事件的“上层”视图(例如Label
)很有用。
View.transform
指定相对于视图边界中心的变换(例如,旋转,缩放)。
您可以使用Transform
类创建转换。
请注意,在转换视图时View.frame
属性是未定义的。使用View.bounds
或View.center
代替。
View.width
获取/设置视图frame
的width
分量的快捷方式。
View.x
获取/设置视图frame
的x
分量的快捷方式。
View.y
获取/设置视图frame
的y
分量的快捷方式。
View.update_interval
如果该View.update()
方法在自定义ui.View
子类中实现,则这定义了两次调用之间的间隔(以秒为单位)。
视图方法
View.add_subview(view)
添加另一个视图作为该视图的子级。
View.bring_to_front()
在同级视图之上显示该视图。
View.close()
关闭通过View.present()
呈现的视图。
View.get_key_commands()
显示此视图时,返回物理(例如蓝牙)键盘的键盘快捷键列表。
默认情况下,这将返回一个空列表,但是您可以在ui.View
子类中重载此列表,以实现硬件键盘快捷键。
每个快捷方式都应使用以下按键定义为一个字典:
- ‘
input
‘(必需,字符串):应该按下的键,例如,’A
‘:如果您想为Cmd + A
定义快捷方式。使用’up
‘,’down
‘,’left
‘,’right
‘作为方向键,’esc
‘作为Esc键的,’\r
‘回车键,’\b
‘退格键。 - ‘
modifiers
‘(可选,字符串):逗号分隔的修饰键,例如’cmd,shift
‘。有效的修饰符:ctrl
,alt
,cmd
和shift
。您可以使用空字符串或忽略此键来定义不带修饰符的快捷方式。 - ‘
title
‘(可选,字符串):键盘快捷方式HUD中显示的标题(按住Cmd
键时显示)。如果未提供标题,则快捷方式仍将起作用,但不会在HUD中显示。
每当用户调用任何键盘命令时,你视图的key_command()
都会被调用,并将命令字典作为sender
参数
View.key_command(sender)
调用任何自定义键盘快捷键时被调用(另请参见get_key_commands()
)。
sender
参数是以’input
‘,’modifiers
‘和’title
‘作为键的命令字典,这样就可以区分不同的命令。
View.present(style=’default’, animated=True, popover_location=None, hide_title_bar=False, title_bar_color=None, title_color=None, orientations=None, hide_close_button=False)
在屏幕上显示视图。
默认情况下,视图显示带有标题栏,该标题栏还包含“关闭”按钮。如果hide_title_bar
设置为True
,则可以用两指向下滑动手势或调用View.close()
方法来关闭视图。
style
参数的有效值为:
- ‘
full_screen
‘:显示的视图覆盖整个屏幕。 - ‘
sheet
‘:视图仅覆盖屏幕的一部分,并且可以通过向下滑动手势将其关闭(在iOS 13+上)。 - ‘
popover
‘:视图以弹出框的形式显示。popover_location
参数可用于指定其位置; 默认情况下,它显示在右上角。此样式仅在iPad上可用。 - ‘
panel
‘:该视图与其他附件(例如控制台)一起显示在滑动面板中。
可选的popover_location
参数可以是2元组(x,y)
,用于指定显示弹出框的点(在屏幕坐标中)(箭头指向的位置)。
orientations
参数是字符串序列,其确定在设备中的何种方向下的视图将自动旋转。它仅用于全屏演示。有效值为’portrait
‘,’portrait-upside-down
‘,’landscape
‘,’landscape-left
‘,’landscape-right
‘。默认情况下,所有方向均受支持。重要提示:orientations
参数在iOS 10开始的iPadOS上没有效果,因为它在技术上不可能锁定支持分屏多任务处理的应用程序的方向。
View.remove_subview(view)
删除通过View.add_subview()
添加到此视图的视图。
View.send_to_back()
将视图置于其同级视图的后面。
View.set_needs_display()
将视图标记为需要重绘。这通常仅对View
实现draw
方法的自定义子类有意义。
View.size_to_fit()
调整视图的大小以包围其子视图或使其大小适合于视图的内容(例如,对于Buttons
,这将选择适合其标题和图像的大小)。
View.wait_modal()
等待直到视图不再出现在屏幕上。这对于创建模式对话框很有用。如果从主(UI)线程(例如,通过action
)调用此方法,它将立即返回。如果视图(尚未)出现在屏幕上,它也会立即返回。典型用法是在View.present()
之后直接调用。
View.update()
可以在子类中实现此方法,以在屏幕上定期自动更新自定义视图,例如,更轻松地实现时钟,计时器等。为了产生效果,还需要将View.update_interval
设置为正值。
按钮
class ui.Button
按钮属性
Button.action
轻按按钮时会调用的函数或方法。
该函数必须具有一个sender
参数(如果是绑定方法,则不包括self
)。
1 | # 作为函数: |
Button.background_image
按钮的背景图片,通常使用Image.resizable_image()
创建。
Button.enabled
该按钮是否启用(禁用的按钮显示为灰色,并且不接收触摸事件)。
Button.font
按钮标题的字体,是一个元组类型(font_name, font_size)
。除了常规字体名称之外,您还可以使用’<system>
‘或’<system-bold>
‘获取默认的常规或粗体字体。
Button.image
按钮的图像,显示在其标题旁边(如果有的话)。
Button.title
按钮的标题。
按钮部件
class ui.ButtonItem([title=None, image=None, action=None, enabled=True, tint_color=None])
ButtonItem
是一种特殊的按钮,可以在用View.present()
呈现的视图或NavigationView
的默认标题栏中显示该按钮。要在标题栏中显示按钮,请将View.right_button_items
或View.left_button_items
属性设置为一系列ButtonItem
对象的列表。与Button
不同,此类不继承自View
。
按钮部件属性
ButtonItem.action
点击按钮时调用的操作。
ButtonItem.enabled
一个布尔标志,用于确定是否启用该按钮。禁用的按钮显示为灰色。
ButtonItem.image
用于按钮的图像。ButtonItem
应该有标题或图片,但不能两者都有。
ButtonItem.title
按钮的标题。ButtonItem
应该有标题或图片,但不能两者都有。
ButtonItem.tint_color
用于按钮标题或图像的着色颜色。
图像视图
class ui.ImageView
用于显示一个ui.Image
。
缩放行为由继承的View.content_mode
属性确定。
图像视图属性
ImageView.image
视图的图像(ui.Image
对象),或None。
图像视图方法
ImageView.load_from_url(url)
从给定的URL异步加载图像,并在完成下载后设置ImageView.image
属性。
标签
class ui.Label
Label
在其范围内显示不可编辑的文本。
标签属性
Label.alignment
标签的文本对齐方式(下面定义的文本对齐方式常量之一)。
Label.font
标签的字体,是一个元组类型(font_name, font_size)
。除了常规字体名称之外,您还可以使用’<system>
‘或’<system-bold>
‘获取默认的常规或粗体字体。
Label.line_break_mode
标签的换行模式(以下定义的换行模式常量之一)。
Label.number_of_lines
用于呈现文本的最大行数。设置为时0,标签将使用所需的行数来显示其文本。
Label.scales_font
布尔值,标签是否自动缩小字体大小以适合其框架内的文本。
Label.min_font_scale
Label.scales_font
启用时要使用的最小比例因子。
Label.text
标签的文本(字符串或unicode)。
Label.text_color
标签的文字颜色。
设置此属性时,你可以传递字符串(CSS颜色名称或十六进制,例如’red
‘或’#ff0000
‘),元组(例如(1.0, 0.0, 0.0, 0.5)
代表半透明的红色)或数字(例如0.5
代表50%的灰色)。在内部,所有的颜色都将转换为RGBA元组,所以当你访问颜色后,你会得到(1.0, 1.0, 1.0, 1.0)
,不管你设置颜色为’white
‘,’#ffffff
‘或1.0
。
导航视图
class ui.NavigationView
NavigationView提供了一个界面,用于呈现视图的堆栈/层次结构,通常用于嵌套列表等。导航视图在顶部提供一个导航栏,其中包含当前视图的名称和一个后退按钮。
导航视图的属性
NavigationView.pop_view([animated=True])
从导航堆栈中弹出顶视图。
NavigationView.push_view(view[, animated=True])
将视图推到导航堆栈上。
导航视图的方法
NavigationView.navigation_bar_hidden
一个布尔标志,用于确定顶部导航栏是否可见。
NavigationView.bar_tint_color
顶部导航栏的背景色。
NavigationView.title_color
导航栏中标题文本的颜色。
滚动视图
class ui.ScrollView
ScrollView提供了对显示超出其范围的内容的支持。可以使用滑动手势滚动内容。
要使滚动工作正常,content_size
必须大于滚动视图的bounds
。ScrollView
在UI设计工具中编辑的子视图时,画布大小会自动设置为滚动视图的内容大小。
滚动视图的属性
ScrollView.always_bounce_horizontal
一个布尔值,该值确定垂直滚动到达内容结尾时是否总是发生跳动。如果此属性设置为True
且bounces
为True
,则即使内容小于滚动视图的范围,也允许垂直拖动。默认值为False
。
ScrollView.always_bounce_vertical
一个布尔值,确定水平滚动到达内容结尾时是否总是发生跳动。如果此属性设置为True
且bounces
为True
,则即使内容小于滚动视图的范围,也允许水平拖动。默认值为False
。
ScrollView.bounces
一个布尔值,它控制滚动视图是否在内容边缘弹跳并再次弹回。
ScrollView.content_inset
内容视图在滚动视图内部插入的区域范围,以4元组(top, left, bottom right)
表示插入量。
ScrollView.content_offset
视图的滚动位置与左上角的偏移量。以(x, y)
元组表示。
ScrollView.content_size
内容的大小(以(width, height)
元组形式)。这确定视图可以在每个方向上滚动多远。
ScrollView.decelerating
(只读)如果用户不拖动内容但仍在滚动,则为True
。
ScrollView.delegate
代理是一个对象,当滚动事件发生在滚动视图中时,该对象将收到以下定义的回调通知。
有关一般意义上的代理概念的更多信息,请参见动作和代理。
1 | class MyScrollViewDelegate (object): |
ScrollView.directional_lock_enabled
如果此属性为False
,则允许在水平和垂直方向上滚动,否则,如果用户开始在一个基本方向(水平或垂直)上拖动,则滚动视图将禁止在另一个方向上滚动。如果拖动方向是对角线,则滚动不会被锁定,并且用户可以向任何方向拖动,直到拖动完成。默认值为False
。
ScrollView.dragging
(只读)一个布尔值,指示用户是否已开始滚动内容。
ScrollView.indicator_style
滚动条的风格(’default
‘,’white
‘,或’black
‘)。
ScrollView.paging_enabled
如果此属性的值为True
,则当用户滚动时,滚动视图将在滚动视图边界的倍数处停止。默认值为False
。
ScrollView.scroll_enabled
如果此属性的值为True
,则启用滚动,如果为False
,则禁用滚动。默认值为True
。
ScrollView.scroll_indicator_insets
滚动条到滚动视图边缘的距离。值为4元组(top, left, bottom right)
,默认值为。(0, 0, 0, 0)
ScrollView.shows_vertical_scroll_indicator
一个布尔值,它控制垂直滚动条是否可见。
ScrollView.shows_horizontal_scroll_indicator
一个布尔值,它控制水平滚动条是否可见。
ScrollView.tracking
(只读)用户是否已触摸内容以启动滚动。
分段控制
class ui.SegmentedControl
SegmentedControl
在水平行中显示多个按钮,每个按钮都可以用作用户可以选择的“选项卡”。
分段控制的属性
SegmentedControl.action
用户选择分段时调用的函数或方法。
该函数必须采用单个sender
参数(如果是绑定类方法,则不包括self
)。
SegmentedControl.enabled
设置为False
时,该控件显示为灰色,并且selected_index
用户无法更改。
SegmentedControl.segments
具有分段标题的字符串序列。
SegmentedControl.selected_index
所选分段的索引。如果未选择任何段,则为-1
。
滑块
class ui.Slider
Slider
是带有“滑块”控件的水平条,允许用户在0.0到1.0之间选择一个值。
滑块的属性
Slider.action
用户更改滑块的值时调用的函数或方法。默认情况下,仅在拖动手势结束时才调用该动作。您可以通过设置continuous
为True
来更改它。
该函数必须采用单个sender
参数(如果是绑定类方法,则不包括self
)。
Slider.continuous
如果设置为True
,则在用户仍在拖动滑块的同时调用action
,否则,仅当拖动手势结束时才发送动作。默认值为False
。
Slider.value
滑块的当前值(在0.0和之间1.0)。
开关
class ui.Switch
Switch是具有开/关状态的按钮。开关的大小固定。
开关的属性
Switch.action
用户更改开关value
时调用的函数或方法。
该函数必须采用单个sender
参数(如果是绑定类方法,则不包括self
)。
Switch.enabled
设置为False
时,该开关呈灰色显示,用户无法更改value
。
Switch.value
开关打开时为True
,否则为False
。
列表视图
class ui.TableView
列表视图在单个列中显示项目列表。TableView
是ScrollView
的子类,因此所有与滚动相关的方法和属性均被继承。
列表视图中的每一行均以一个TableViewCell
表示。这些单元格具有默认的文本标签,但是你也可以为其添加自定义视图。
列表视图需要一个数据源来显示任何单元格。数据源是实现TableView.data_source
以下描述的方法的任何对象(并非所有方法都是必需的)。
为了使事情变得更容易,该ui
模块包括一个ListDataSource
类,该类实现了显示简单字符串列表的所有要求,这些字符串可以使用标准列表视图界面进行编辑。修改列表的ListDataSource.items
后,ListDataSource
会自动重新加载其列表视图。当用户在编辑模式下执行滑动删除手势或对行重新排序时,它也会更新其组件。
在UI设计器创建列表视图会自动设置他们的data_source
和delegate
到一个自动为你创建的ListDataSource
,并且无需编写任何代码来配置组件的静态列表。
列表视图属性
TableView.allows_multiple_selection
一个布尔值,该值决定用户是否可以在编辑模式之外选择多个行。
TableView.allows_multiple_selection_during_editing
一个布尔值,控制用户是否可以在编辑模式下同时选择多个单元格。设置为True
时,编辑模式中选中的行旁边会出现选中标记。
TableView.allows_selection
TableView.allows_selection_during_editing
一个布尔值,该值确定当表视图处于编辑模式下时用户是否可以选择单元格。
TableView.data_source
列表视图的数据源,可以是实现以下定义的方法的任何对象。所有方法都是可选的,例如,如果你的数据源不实现编辑,则只需省去与编辑相关的方法即可。
如果你的需求很简单,请考虑使用ListDataSource
,它已经实现了在单个区域中显示简单字符串列表的所有要求。
1 | class MyTableViewDataSource (object): |
TableView.delegate
列表视图的代理可以是实现以下定义的方法的任何对象。代理不需要实现所有方法,当未实现方法时,列表视图将使用默认行为。
有关一般意义上的代理概念的更多信息,请参见动作和代理。
代理方法:
1 | class MyTableViewDelegate (object): |
TableView.editing
一个布尔值,它确定列表视图是否处于编辑模式。
取决于data_source
,列表视图可能会在每个单元格的左侧显示删除控件,并在右侧显示重新排序控件。
默认情况下,在编辑模式下将禁用常规选择,你可以通过将其设置allows_selection_during_editing
为True
来进行更改。
TableView.row_height
列表视图单元格的高度。
TableView.selected_row
第一个选定行的区域和行数(2元组)。
TableView.selected_rows
选定行的序列,每个元素为2元组。(section, row)
TableView.separator_color
单元格分隔线的颜色。
设置此属性时,你可以传递字符串(CSS颜色名称或十六进制,例如’red
‘或’#ff0000
‘),元组(例如(1.0, 0.0, 0.0, 0.5)
代表半透明的红色)或数字(例如0.5
代表50%的灰色)。在内部,所有的颜色都将转换为RGBA元组,所以当你访问颜色后,你会得到(1.0, 1.0, 1.0, 1.0)
,不管你设置颜色为’white
‘,’#ffffff
‘或1.0
。
列表视图方法
TableView.reload()
TableView.reload_data()
重新加载列表视图的数据(通过调用data_source
的相关方法)。
TableView.set_editing(editing, animated)
与设置editing
属性相同,但是具有动画过渡的选项。
TableView.delete_rows(rows)
使用默认动画从列表视图中删除给定的行索引序列。如果你不想要动画,只需修改数据源并reload()
列表视图即可。
从tableview_number_of_rows
方法返回数据源更新后的行数。如果行数不一致,将抛出异常。
TableView.insert_rows(rows)
使用默认动画将给定的行索引序列插入列表视图。如果你不想要动画,只需修改数据源并reload()
列表视图即可。
从tableview_number_of_rows
方法返回数据源更新后的行数。如果行数不一致,将抛出异常。
序列中的每个行索引可以是数字的2元组(section, row)
或单个数字。如果给出一个数字,则首先假定为section
。
列表视图单元格
class ui.TableViewCell(style=’default’)
TableViewCell
对象为TableView
提供的可视内容。通常,你可以在data_source
的tableview_cell_for_row
方法中创建单元格。
style
参数可以是一个’default
‘,’subtitle
‘,’value1
‘,或’value2
‘。在默认样式中,单元格仅具有一个内置文本标签(text_label
),其他样式具有副标签(detail_text_label
)。
列表视图单元格属性
TableViewCell.accessory_type
决定在单元格右侧显示的内容。可以是以下之一:
- ‘
none
‘ – 无配件 - ‘
disclosure_indicator
‘ – “>”形箭头 - ‘
detail_disclosure_button
‘ – “信息”按钮和“>”形箭头(在列表视图的代理中实现tableview_accessory_button_tapped
方法用于处理按钮上的点击操作) - ‘
detail_button
‘ – “信息”按钮(在列表视图的代理中实现tableview_accessory_button_tapped
方法用于处理按钮上的点击操作)
TableViewCell.content_view
(只读)单元格的内容视图,当单元格进入编辑模式时,该视图会自动调整大小。如果要将自定义视图添加到单元格,建议将它们添加到内容视图,而不是单元格本身。
TableViewCell.detail_text_label
(只读)内置的详细信息文本标签,用于某些单元格样式(默认样式为None
)。
TableViewCell.image_view
(只读)单元格的内置图像视图。
TableViewCell.selectable
确定单元格是否显示选择高亮。
TableViewCell.selected_background_view
用于显示单元格高亮/选定状态的视图。它会自动调整大小以填充整个背景。
TableViewCell.text_label
(只读)单元格的主要文本标签。标签是由单元格自动创建的,你不能替换它,但是可以像其他标签一样自定义其字体,文本颜色等。
文本输入区域
class ui.TextField
TextField
显示一行用户可编辑的文本。
文本输入区域的属性
TextField.action
文本输入区域完成编辑时调用的函数或方法。
该函数必须采用单个sender
参数(如果是绑定类方法,则不包括self
)。
TextField.alignment
文本输入区域的文本对齐方式(下面定义的文本对齐方式常量之一)。
TextField.autocapitalization_type
文本输入区域的自动大写行为是下面定义的文本自动大写常量之一。
TextField.autocorrection_type
文本输入区域的自动更正行为可以是None
(默认行为,取决于用户的系统设置),True
(启用自动更正)或False
(禁用自动更正)。
TextField.bordered
设置为True
时,文本输入区域会显示默认(圆角矩形)边框。
TextField.clear_button_mode
确定何时/是否在文本输入区域的右侧显示清除按钮。
- ‘
never
‘ – 清除按钮不显示(默认) - ‘
always
‘ – 清除按钮始终可见 - ‘
while_editing
‘ – 仅在编辑文本时显示清除按钮 - ‘
unless_editing
‘– 仅在不编辑文本时显示清除按钮
TextField.delegate
可以通过实现以下方法来监听各种与编辑有关的事件的辅助对象(所有方法都是可选的,因此代理可以只实现其中的一些方法)。
有关一般意义上的代理概念的更多信息,请参见动作和代理。
代理方法:
1 | class MyTextViewDelegate (object): |
TextField.enabled
设置为False
时,文本输入区域显示为灰色且不可编辑。
TextField.font
文本输入区域的字体为(font_name, font_size)
元组 。除了常规字体名称之外,您还可以使用’<system>
‘或’<system-bold>
‘获取默认的常规或粗体字体。
TextField.keyboard_type
文本输入区域的键盘类型(下面定义的键盘类型常量之一)。
TextField.placeholder
文本输入区域为空时显示的灰色占位符文本。
TextField.secure
设置为True
可将文本输入区域转换为密码字段(带屏蔽输入)。
TextField.spellchecking_type
文本输入区域的拼写检查行为可以是None
(默认行为,取决于用户的系统设置),True
(启用拼写检查)或False
(禁用拼写检查)。
TextField.text
文本输入区域的文本。
TextField.text_color
文本输入区域的文本颜色。
设置此属性时,你可以传递字符串(CSS颜色名称或十六进制,例如’red
‘或’#ff0000
‘),元组(例如(1.0, 0.0, 0.0, 0.5)
代表半透明的红色)或数字(例如0.5
代表50%的灰色)。在内部,所有的颜色都将转换为RGBA元组,所以当你访问颜色后,你会得到(1.0, 1.0, 1.0, 1.0)
,不管你设置颜色为’white
‘,’#ffffff
‘或1.0
。
文本输入区域的方法
TextField.begin_editing()
将键盘焦点移到该文本输入区域以开始编辑。
TextField.end_editing()
结束此文本输入区域的编辑,即关闭键盘。
文本视图
class ui.TextView
TextView
实现可滚动的多行文本区域。默认情况下,文本视图是可编辑的,但是它们也可以显示用户无法更改的静态文本。
文本视图的属性
TextView.alignment
TextView.autocapitalization_type
文本视图的自动大写行为是下面定义的文本自动大写常量之一。
TextView.autocorrection_type
文本视图的自动更正行为可以是None
(默认行为,取决于用户的系统设置),True
(启用自动更正)或False
(禁用自动更正)。
TextView.auto_content_inset
设置为True
(默认值)时,文本视图会在屏幕键盘尺寸更改时自动设置插入内容尺寸,以便键盘覆盖的内容仍然可访问。
TextView.delegate
文本视图的代理可以是实现以下某些方法(某些)的任何对象。您可以使用代理来通知编辑事件,并在某些情况下自定义文本视图的行为。
有关一般意义上的代理概念的更多信息,请参见动作和代理。
代理方法:
1 | class MyTextViewDelegate (object): |
TextView.editable
设置为False
时,用户无法编辑文本视图的内容。
TextView.font
文本视图的字体为(font_name, font_size)
元组 。除了常规字体名称之外,您还可以使用’<system>
‘或’<system-bold>
‘获取默认的常规或粗体字体。
TextView.keyboard_type
文本视图的键盘类型(下面定义的键盘类型常量之一)。
TextView.selectable
设置为False
时,用户无法选择文本视图的内容。
TextView.selected_range
代表当前用户选择范围的2元组(start, end)
。设置此项时,将超出范围的范围引发ValueError
。
TextView.spellchecking_type
文本视图的拼写检查行为可以是None
(默认行为,取决于用户的系统设置),True
(启用拼写检查)或False
(禁用拼写检查)。
TextView.text
文本视图的文本。
TextView.text_color
文本视图的文本颜色。
文本视图的方法
TextView.begin_editing()
将键盘焦点移到该文本视图以开始编辑。
TextView.end_editing()
结束编辑此文本视图,即关闭键盘。
TextView.replace_range(range, text)
替换文本视图文本中的范围。所述范围参数必须是(start, end)
元组。要插入文本,可以使用零长度范围。
网页视图
class ui.WebView
WebView
实现嵌入式WebKit浏览器控件。
网页视图的属性
WebView.delegate
网页视图的代理可以是实现以下定义的方法(某些)的任何对象。您可以使用代理来通知某些与加载网页有关的事件(例如,页面加载完成时)。您还可以使用代理在链接被点击时自定义网页视图的行为(例如,仅允许某些类型的导航或处理Python代码中的自定义URL方案)。
有关一般意义上的代理概念的更多信息,请参见动作和代理。
代理方法:
1 | class MyWebViewDelegate (object): |
WebView.scales_page_to_fit
如果为True
,则将网页缩放到适合的大小,并且用户可以放大和缩小。如果为False
,则禁用用户缩放。默认值为False
。
网页视图的方法
WebView.load_url(url)
加载给定的URL。加载过程是异步的,即此方法将在网页视图完成加载之前返回。
WebView.load_html(html)
渲染给定的HTML字符串。
WebView.go_back()
返回网页视图的页面历史记录。如果历史记录为空,则此方法不执行任何操作。
WebView.go_forward()
前进到网页视图的页面历史记录。如果网页视图位于其历史记录堆栈的末尾,则此方法不执行任何操作。
WebView.reload()
重新加载当前页面。
WebView.stop()
停止加载当前请求。
WebView.eval_js(js)
WebView.evaluate_javascript(js)
在当前页面的上下文中执行JavaScript片段,并将结果作为字符串返回。
日期选择器
class ui.DatePicker
DatePicker
显示用户可选的日期和/或时间。也可以配置为显示倒计时。
日期选择器的属性
DatePicker.action
选择器的日期值更改时调用的函数或方法。
该函数必须采用单个sender
参数(如果是绑定类方法,则不包括self
)。
DatePicker.countdown_duration
日期选择器的当前倒计时值(以秒为单位)(仅在mode为DATE_PICKER_MODE_COUNTDOWN
时起作用)。
DatePicker.date
选择器当前显示的日期(为datetime.datetime
对象)
DatePicker.enabled
设置为False
时,日期选择器显示为灰色,并且不处理触摸事件。
DatePicker.mode
日期选择器的当前模式(以下定义的日期选择器模式常量之一)。
活动指示器
ActivityIndicator
是指示某种不确定的进度,例如网络请求。它显示为圆形“旋转器”。活动指示器的大小固定,具体取决于其样式。
注意:ActivityIndicator
类目前在可视UI编辑器中不可用。
活动指示器的属性
ActivityIndicator.style
在活动指示器样式下定义的整数常数之一(灰色,白色或白色大号)。活动指示器的样式还确定其大小。
ActivityIndicator.hides_when_stopped
一个布尔标志,用于确定活动指示器在不设置动画时是否自动隐藏。
活动指示器的方法
ActivityIndicator.start()
开始指示器动画。
ActivityIndicator.stop()
停止指示器动画。
API参考——其他类
图像
class ui.Image
Image
对象表示可用于装饰各种控件的位图图像(例如Button
)。也可以是通过ImageContext
进行自定义绘图操作的结果。
图像的属性
Image.scale
(只读)图像的比例因子,通常2.0用于“视网膜”图像,否则为1.0。
Image.size
(只读)图像的大小,以磅为单位(像素除以scale
)。大小以(width, height)
元组表示。
图像的类方法
classmethod Image.from_data(image_data[, scale])
根据image_data
字符串中的二进制数据创建图像。数据应采用一种常见的图像格式(png,jpeg …)。
可选的scale
参数指定如何在高分辨率(“视网膜”)屏幕上显示图像。2.0是大多数iOS设备的典型值。默认值为1.0。
classmethod Image.named(image_name)
从内置图像或本地文件创建Image
对象。如果是内置图像,则不使用文件扩展名,否则名称应为完整的文件名,包括扩展名(png,jpg …)。
图像的方法
Image.clip_to_mask(x, y, width, height)
使用该图像作为遮罩,以进行之后的绘制操作。
Image.draw([x, y, width, height])
在当前绘图上下文中将图像绘制为矩形。矩形参数是可选的,如果忽略该参数,将以其自然大小绘制图像。
Image.draw_as_pattern(x, y, width, height)
用作重复图案的图像填充给定的矩形。如果要用图案填充任意形状,可以使用Path.add_clip()
。
Image.resizable_image(top, left, bottom, right)
创建具有给定边缘的9色块图像。此技术最常用于为按钮等创建可缩放背景。
Image.show()
在控制台中显示图像。
Image.to_png()
以PNG格式返回图像的字节串。例如,可以将其保存到文件中。
Image.with_rendering_mode(mode)
创建并返回具有指定渲染模式的Image
新对象。
有关有效值,请参见下面的渲染模式列表。
图像上下文
class ui.ImageContext(width, height, scale=0)
ImageContext
提供了一个上下文管理器以绘制自定义图像。有关更多详细信息,请参见绘画上下文。
例:
1 | import ui |
图像上下文的方法
ImageContext.get_image()
从当前绘制图形创建一个Image
。
路径
class ui.Path
Path对象代表直线,曲线和形状。它们可用于图像和视图中的各种绘图操作(填充,描边,剪切)。
路径的属性
Path.bounds
(只读)路径的边界矩形(包含所有点)。
Path.eo_fill_rule
如果为True
,则使用奇偶规则填充路径。如果为False
(默认值),则使用非零规则填充。这两个规则都是确定使用当前填充颜色填充路径的哪些区域的算法。光线从给定区域内的点绘制到路径范围之外的任意点。交叉路径线(包括隐式路径线)的总数和每条路径线的方向如下:
- 对于奇偶规则,如果路径交叉的总数为奇数,则认为该点在路径内部,并且填充了相应的区域。如果交叉点的数量为偶数,则认为该点在路径之外,并且该区域未被填充。
- 对于非零规则,从左到右路径的交叉点算作+1,从右到左路径的交叉点算作-1。如果交叉的总和不为零,则认为该点在路径内,并且相应的区域被填充。如果总和为0,则该点在路径之外,并且该区域未被填充。
Path.line_cap_style
描边时路径终点的形状。该值应该是下面列出的线帽样式常量之一。
Path.line_join_style
描边路径的连接段之间的关节形状。该值应该是下面列出的线段连接样式常量之一。
Path.line_width
描边时路径的线的宽度(以磅为单位)。
路径的类方法
classmethod Path.oval(x, y, width, height)
在给定的矩形中创建一个椭圆形的Path。
classmethod Path.rect(x, y, width, height)
创建具有给定矩形的Path。
classmethod Path.rounded_rect(x, y, width, height, corner_radius)
创建一个带有圆角的矩形Path。
路径的方法
Path.add_arc(center_x, center_y, radius, start_angle, end_angle[, clockwise=True])
在路径上附加一个弧。
Path.add_clip()
修改当前图形上下文的可见绘图区域。调用它之后,后续的绘制操作仅在渲染的内容出现在路径的填充区域内时才会生成。
Path.add_curve(end_x, end_y, cp1_x, cp1_y, cp2_x, cp2_y)
在路径上附加三次贝塞尔曲线。
Path.add_quad_curve(end_x, end_y, cp_x, cp_y)
将二次贝塞尔曲线附加到路径。
Path.append_path(other_path)
将指定路径的内容追加到此路径。
Path.close()
通过在子路径的第一个点和最后一个点之间创建线段来封闭当前子路径。
Path.fill()
使用当前图形属性绘制路径包围的区域。
Path.hit_test(x, y)
检查指定的点是否在路径的边界内。
Path.line_to(x, y)
将直线段附加到指定点。
Path.move_to(x, y)
将路径的当前点移动到指定位置。
Path.set_line_dash(sequence[, phase])
设置路径的划线模式。sequence
是一个数字列表,其中包含线段的长度和图案中的间隙。它从第一个线段长度开始。phase
是开始绘制图案的偏移量。例如,图案[5, 2, 3, 2]的相位值为6将导致绘图从第一个间隙的中间开始。
Path.stroke()
使用当前绘图属性沿路径绘制一条线。
触摸
class ui.Touch
Touch
对象代表触摸在屏幕上的手指。通常,您不直接创建触摸对象,但是可以检查传递给自定义View
的触摸处理方法的对象。
触摸的属性
Touch.location
(只读)触摸在被触摸View
所属的坐标系中的位置(为(x,y)
2元组)。
Touch.phase
(只读)触摸的当前阶段,可以是’began
‘,’ended
‘,’moved
‘,’stationary
‘或’cancelled
‘。
Touch.prev_location
(只读)触摸的前一个location
。
Touch.timestamp
(只读)触摸的时间戳(自1970年以来的毫秒数)。
Touch.touch_id
(只读)触摸的唯一标识符(整数),可用于跟踪不同事件之间的触摸。
变换
class ui.Transform
Transform
对象表示一个仿射变换矩阵。它最常与View.transform
属性一起使用(也可以设置动画)。
变换的类方法
classmethod Transform.rotation(rad)
创建具有给定角度(以弧度为单位)的旋转变换。
classmethod Transform.scale(sx, sy)
使用给定的水平和垂直比例因子创建比例变换。
classmethod Transform.translation(tx, ty)
使用给定的水平和垂直值创建平移变换。
变换的方法
Transform.concat(other_transform)
将Transform
与另一个Transform
连接起来,例如创建一个既包含旋转又包含比例的单一变换。
Transform.invert()
返回可用于反转此转换效果的Transform
。
全局状态
class ui.GState
GState
类代表当前绘图上下文,即当前填充颜色,变换,剪切等的全局状态,它通常用作上下文管理器,用于执行改变全局状态的绘制操作(例如剪切),并且将其恢复到先前状态。
本示例演示了如何使用Transform
绘制旋转后的文本,然后将绘制状态重置为正常状态:
1 | import ui |
数据资源列表
class ui.ListDataSource(items=None)
ListDataSource
实现TableView
数据源以显示可以使用标准列表视图界面进行编辑的简单字符串列表。修改ListDataSource.items
列表后,ListDataSource
会自动重新加载其列表视图。当用户在编辑模式下执行滑动删除手势或对行重新排序时,它也会更新其组件。
ListDataSource
也可以设置为TableView的代理来处理选择的动作。
数据资源列表属性
ListDataSource.accessory_action
在列表的一个单元格中点击一个信息按钮时调用。动作的sender
参数将是ListDataSource
对象。
ListDataSource.action
在TableView
的选择更改时调用(并且数据源设置为表视图的代理)。动作的sender
参数将是ListDataSource
对象。你可以通过检查selected_row
属性来获取受影响的行。
ListDataSource.delete_enabled
一个布尔型标志,确定用户是否可以删除行。
ListDataSource.edit_action
在删除或重新排列行时调用。动作的sender
参数将是ListDataSource
对象。当该动作被调用前,items
属性已经被更新。
ListDataSource.font
用于TableView
中显示的每一行的字体。这是字体名称和大小的2元组,例如。('<system>', 20)
ListDataSource.highlight_color
数据源用于其创建的单元格背景的高亮/选择的颜色。
设置此属性时,你可以传递字符串(CSS颜色名称或十六进制,例如’red
‘或’#ff0000
‘),元组(例如(1.0, 0.0, 0.0, 0.5)
代表半透明的红色)或数字(例如0.5
代表50%的灰色)。在内部,所有的颜色都将转换为RGBA元组,所以当你访问颜色后,你会得到(1.0, 1.0, 1.0, 1.0)
,不管你设置颜色为’white
‘,’#ffffff
‘或1.0
。
ListDataSource.items
TableView
中显示的一系列组件。这可以是字符串列表或字典列表,以更好地控制项目的显示方式。项目字典可以包含以下键:
- ‘
title
‘– 列表项的文本 - ‘
image
‘- 标题旁边显示的图像,可以是Image
对象或可以使用于Image.named()
的名称。 - ‘
accessory_type
‘- 项目的附件类型,可以是’none
‘,’checkmark
‘,’detail_button
‘ ,’detail_disclosure_button
‘或’disclosure_indicator
‘。
ListDataSource.move_enabled
一个布尔型标志,确定用户是否可以对行进行重新排序。
ListDataSource.number_of_lines
用于列表项标题的行数(等于Label.number_of_lines
)。
ListDataSource.selected_row
当前选定行的索引(如果未选择任何行,则为-1)。
ListDataSource.tapped_accessory_row
最后点击的附件按钮的行索引。这对于accessory_action
实现非常有用。
ListDataSource.text_color
数据源用于配置单元格的文本颜色。
设置此属性时,你可以传递字符串(CSS颜色名称或十六进制,例如’red
‘或’#ff0000
‘),元组(例如(1.0, 0.0, 0.0, 0.5)
代表半透明的红色)或数字(例如0.5
代表50%的灰色)。在内部,所有的颜色都将转换为RGBA元组,所以当你访问颜色后,你会得到(1.0, 1.0, 1.0, 1.0)
,不管你设置颜色为’white
‘,’#ffffff
‘或1.0
。
API参考——函数
工具函数
ui.animate(animation, duration=0.25, delay=0.0, completion=None)
将各种View
属性的进行动画式的变化。动画是可调用的函数,可以修改设置动画的属性。有关示例,请参见查看视图动画部分。
ui.cancel_delays()
取消预定的所有未决调用delay()
。
ui.convert_point(point=(0, 0), from_view=None, to_view=None)
将点从一个视图的坐标系转换到另一个视图。如果from_view
或to_view
为None
,则使用屏幕坐标系。
ui.convert_rect(rect=(0, 0, 0, 0), from_view=None, to_view=None)
将矩形从一个视图的坐标系转换到另一个视图。如果from_view
或to_view
为None
,则使用屏幕坐标系。
ui.delay(func, seconds)
在给定的延迟后调用一个函数。
也可以参看: cancel_delays()
ui.in_background(fn)
在主解释器线程上调用一个函数。这对于从动作或代理回调执行长时间运行的任务而不阻塞UI很有用。它也可以用于不支持从主UI线程调用的函数(例如console.alert()
)。
通常将其用作函数装饰器:
1 | import ui |
ui.load_view(pyui_path=None, bindings=None)
从UI设计工具创建的.pyui文件加载视图。如果省略路径,则使用扩展名为.pyui的当前脚本的文件名。
路径几乎总是可以省略(它将自动加载与当前工作流程操作关联的UI)。
如果pyui文件包含Python标识符(例如,动作名称或自定义属性),则会在调用者的环境中对它们进行运算。可以用bindings
参数(从名称到对象的映射)覆盖此行为。
ui.load_view_str(json_string, bindings=None)
从JSON字符串(.pyui文件的内容)加载视图。由内部使用load_view()
。
ui.dump_view(view)
将视图序列化为JSON字符串。返回值可以另存为.pyui文件,也可以将其传递给load_view_str()
以后重建视图。
不支持自定义视图属性,并且只有从内置图像(即使用ui.Image.named()
)中加载图像时,图像视图和按钮中的图像才会被保存。总体而言,此功能的局限性与可视UI编辑器的局限性相似。
ui.get_screen_size()
以(width, height)
元组形式返回主屏幕的大小(以磅为单位)。
ui.get_window_size()
返回应用程序主窗口的大小。虽然通常与get_screen_size()
相同,但当应用程序在iPad上以分屏模式运行时,此函数返回的大小会有所不同。
ui.get_ui_style()
返回iOS 13+(’dark
‘或’light
‘)上的当前UI样式。
ui.parse_color(color)
将颜色从各种格式转换为(r,g,b,a)
元组。最常见的颜色是十六进制字符串(例如’#ff0000
‘)或CSS颜色名称(例如’red
‘)。
绘画函数
ui.fill_rect(x, y, width, height)
使用当前颜色(通过设置set_color()
)填充给定的矩形 。
ui.set_blend_mode(mode)
为以下绘图操作设置混合模式。mode
可以是下面列出的混合模式常数之一。
ui.set_color(color)
设置当前图形颜色。这会影响后续的绘制操作,例如fill_rect()
或Path.fill()
。
您可以传递字符串(CSS颜色名称或十六进制,例如’red
‘或’#ff0000
‘),元组(例如(1.0, 0.0, 0.0, 0.5)
对于半透明的红色)或数字(例如0.5
对于50%的灰色)。
ui.set_shadow(color, offset_x, offset_y, blur_radius)
为以下绘图操作配置阴影。当前阴影是图形上下文全局状态的一部分,如果只想临时设置阴影,请使用GState
上下文管理器保存和还原图形状态。
ui.concat_ctm(transform)
使用Transform
来在图形环境中变换用户坐标系。
如果只想临时修改坐标系,请使用GState
上下文管理器保存和恢复图形状态。
ui.measure_string(string, max_width=0, font=(‘
使用draw_string()
绘制字符串,并返回字符串的尺寸(width, height)
。
当max_width
参数设置为零(默认值)时,图形的宽度不受限制(即,如果没有手动换行符,将在单行上绘制)。
ui.draw_string(string, rect=(0, 0, 0, 0), font=(‘
在给定的矩形中绘制一个字符串。如果矩形的大小为零,则图形将使用其原点作为图形位置,但是大小不受限制。
ui.convert_point(point=(0, 0), from_view=None, to_view=None)
在两个视图之间转换坐标。如果其中一个视图为None
,则在另一个视图和基本屏幕坐标之间进行转换。
API参考——常量
混合模式
以下混合模式可用于set_blend_mode()
。它们被定义为整数常量。下面的混合模式描述引自Apple的Core Graphics文档。
混合模式常量表示Porter-Duff混合模式。这些混合模式的方程式中的符号为:
- R 是预乘结果
- S 是源颜色,包括alpha
- D 是目标颜色,包括alpha
- Ra,Sa和Da是R,S和D的alpha分量
ui.BLEND_NORMAL
在背景图像样本上绘制源图像样本。
ui.BLEND_MULTIPLY
将源图像样本与背景图像样本相乘。这样产生的颜色至少与两个样本颜色之一一样暗。
ui.BLEND_SCREEN
将源图像样本的逆与背景图像样本的逆相乘。这样所产生的颜色至少要与两种样本颜色中的一种颜色一样浅。
ui.BLEND_OVERLAY
根据背景颜色,将源图像样本与背景图像样本相乘或屏蔽。结果是覆盖现有图像样本,同时保留背景的高光和阴影。背景颜色与源图像混合以反映背景的明暗。
ui.BLEND_DARKEN
通过选择较暗的样本(从源图像或背景)来创建合成图像样本。结果是背景图像样本被任何较暗的源图像样本替代。否则,背景图像样本将保持不变。
ui.BLEND_LIGHTEN
通过选择较亮的样本(从源图像或背景)来创建合成图像样本。结果是背景图像样本被任何较亮的源图像样本替代。否则,背景图像样本将保持不变。
ui.BLEND_COLOR_DODGE
增亮背景图像样本以反映源图像样本。指定黑色的源图像样本值不会产生变化。
ui.BLEND_COLOR_BURN
使背景图像样本变暗以反映源图像样本。指定白色的源图像样本值不会产生变化。
ui.BLEND_SOFT_LIGHT
根据源图像样本的颜色,颜色变暗或变亮。如果源图像样本颜色比50%灰色浅,则背景变亮,类似于闪避。如果源图像样本颜色比50%灰色深,则背景变暗,类似于燃烧。如果源图像样本颜色等于50%灰色,则不会更改背景。等于纯黑色或纯白色的图像样本会产生较暗或较亮的区域,但不会导致纯黑色或白色。总体效果类似于将漫射聚光灯照在源图像上所实现的效果。使用此功能可以将亮点添加到场景中。
ui.BLEND_HARD_LIGHT
根据源图像样本的颜色,颜色变暗或变亮。如果源图像样本颜色比50%的灰色浅,则背景变亮,类似于筛选。如果源图像样本颜色比50%灰色深,则背景变暗,类似于相乘。如果源图像样本颜色等于50%灰色,则源图像不会更改。等于纯黑色或纯白色的图像样本会导致纯黑色或白色。总体效果类似于通过在源图像上照射刺眼的聚光灯所实现的效果。使用此功能可以将亮点添加到场景中。
ui.BLEND_DIFFERENCE
从背景图像样本颜色中减去源图像样本颜色,或从背景图像样本颜色中减去源图像样本颜色,具体取决于哪个样本具有较大的亮度值。黑色的源图像样本值不变。白色反转背景颜色值。
ui.BLEND_EXCLUSION
产生与kCGBlendModeDifference
相似的效果,但对比度较低。黑色的源图像样本值不会产生变化。白色反转背景颜色值。
ui.BLEND_HUE
将背景的亮度和饱和度值与源图像的色相一起使用。
ui.BLEND_SATURATION
将背景的亮度和色度值与源图像的饱和度一起使用。背景中没有饱和的区域(即纯灰色区域)不会产生变化。
ui.BLEND_COLOR
将背景的亮度值与源图像的色相和饱和度值一起使用。此模式保留图像中的灰度级。您可以使用此模式为单色图像着色或为彩色图像着色。
ui.BLEND_LUMINOSITY
将背景的色相和饱和度与源图像的亮度一起使用。此模式创建的效果与BLEND_COLOR
所创建的效果相反。
ui.BLEND_CLEARR = 0
ui.BLEND_COPYR = S
ui.BLEND_SOURCE_INR = S*Da
ui.BLEND_SOURCE_OUTR = S*(1 - Da)
ui.BLEND_SOURCE_ATOPR = S*Da + D*(1 - Sa)
ui.BLEND_DESTINATION_OVERR = S*(1 - Da) + D
ui.BLEND_DESTINATION_INR = D*Sa
ui.BLEND_DESTINATION_OUTR = D*(1 - Sa)
ui.BLEND_DESTINATION_ATOPR = S*(1 - Da) + D*Sa
ui.BLEND_XORR = S*(1 - Da) + D*(1 - Sa)
. 这种XOR模式名义上仅与经典的位图XOR操作相关,而Quartz 2D不支持这种操作。
ui.BLEND_PLUS_DARKERR = MAX(0, 1 - ((1 - D) + (1 - S)))
ui.BLEND_PLUS_LIGHTERR = MIN(1, S + D)
线冒样式
以下常量用于Path.line_cap_style
属性。
ui.LINE_CAP_BUTT
ui.LINE_CAP_ROUND
ui.LINE_CAP_SQUARE
线段连接样式
以下常量用于Path.line_join_style
属性。
ui.LINE_JOIN_BEVEL
ui.LINE_JOIN_MITER
ui.LINE_JOIN_ROUND
键盘类型
以下常量用于TextView.keyboard_type
和TextField.keyboard_type
。
ui.KEYBOARD_ASCII
ui.KEYBOARD_DECIMAL_PAD
ui.KEYBOARD_DEFAULT
ui.KEYBOARD_EMAIL
ui.KEYBOARD_NAME_PHONE_PAD
ui.KEYBOARD_NUMBERS
ui.KEYBOARD_NUMBER_PAD
ui.KEYBOARD_PHONE_PAD
ui.KEYBOARD_TWITTER
ui.KEYBOARD_URL
ui.KEYBOARD_WEB_SEARCH
视图内容模式
以下常量用于View.content_mode
属性(尤其是用于ImageView
)。
ui.CONTENT_SCALE_TO_FILL
如果需要,可以通过更改内容的纵横比来缩放内容以适合其自身的大小。
ui.CONTENT_SCALE_ASPECT_FIT
通过保持纵横比来缩放内容以适合视图的大小。视图边界的所有剩余区域都是透明的。
ui.CONTENT_SCALE_ASPECT_FILL
缩放内容以填充视图的大小。内容的某些部分可能会被裁剪以填充视图的边界。
ui.CONTENT_REDRAW
通过调用View.set_needs_display()
方法,当边界改变时重新显示视图。
ui.CONTENT_CENTER
将内容置于视图边界的中心,并保持相同的比例。
ui.CONTENT_TOP
将内容居中对齐在视图边界的顶部。
ui.CONTENT_BOTTOM
将内容居中对齐在视图边界的底部。
ui.CONTENT_LEFT
在视图的左侧对齐内容。
ui.CONTENT_RIGHT
在视图的右侧对齐内容。
ui.CONTENT_TOP_LEFT
在视图的左上角对齐内容。
ui.CONTENT_TOP_RIGHT
在视图的右上角对齐内容。
ui.CONTENT_BOTTOM_LEFT
在视图的左下角对齐内容。
ui.CONTENT_BOTTOM_RIGHT
在视图的右下角对齐内容。
文本行超出模式
ui.LB_WORD_WRAP
包装发生在单词边界,除非单词本身不适合一行。
ui.LB_CHAR_WRAP
包装发生在第一个不合适的字符之前。
ui.LB_CLIP
简单的切掉超出边界的部分。
ui.LB_TRUNCATE_HEAD
将显示该行,以使其末端适合容器,并且在行首缺少的文本用省略号表示。
ui.LB_TRUNCATE_TAIL
将显示该行,以使开头适合容器,并且在行尾缺少的文本用省略号指示。
ui.LB_TRUNCATE_MIDDLE
将显示该行,以便在容器中插入开始和结束位置,中间用省略号指示缺少的文本。
文本对齐
下面是用于(Label
,TextField
和TextView
)还有draw_string()
方法对准属性的常量。
ui.ALIGN_LEFT
沿左边缘对齐文本。
ui.ALIGN_CENTER
沿中心线的两侧均匀对齐文本。
ui.ALIGN_RIGHT
沿右边缘对齐文本。
ui.ALIGN_JUSTIFIED
完全对齐文本,使段落的最后一行自然对齐。
ui.ALIGN_NATURAL
使用与当前脚本关联的默认对齐方式。
文本自动大写
ui.AUTOCAPITALIZE_NONE
ui.AUTOCAPITALIZE_WORDS
ui.AUTOCAPITALIZE_SENTENCES
ui.AUTOCAPITALIZE_ALL
日期选择器模式
以下常量用于DatePicker.mode
属性。
ui.DATE_PICKER_MODE_TIME
日期选择器显示小时,分钟和(取决于当前语言环境)AM / PM名称。
ui.DATE_PICKER_MODE_DATE
日期选择器显示月份,月份中的几天和年份。
ui.DATE_PICKER_MODE_DATE_AND_TIME
日期选择器显示日期(作为星期,月份和月份中的天的统一值)加上小时,分钟和(可选)AM / PM名称。
ui.DATE_PICKER_MODE_COUNTDOWN
日期选择器显示小时和分钟值。
活动指示器样式
ui.ACTIVITY_INDICATOR_STYLE_GRAY
小型灰色活动指示器。
ui.ACTIVITY_INDICATOR_STYLE_WHITE
小型白色活动指示器。
ui.ACTIVITY_INDICATOR_STYLE_WHITE_LARGE
大型白色活动指示器。
图像渲染模式
以下常量用于Image.with_rendering_mode()
方法。
ui.RENDERING_MODE_AUTOMATIC
默认渲染模式。图像的渲染方式取决于上下文(例如,模板模式用于按钮,原始模式用于图像视图)
ui.RENDERING_MODE_ORIGINAL
始终绘制原始图像,而不将其视为模板。
ui.RENDERING_MODE_TEMPLATE
始终将图像绘制为模板图像,而忽略其颜色信息。用于有色按钮等。