SiriBlog

siriyang的个人博客


  • 首页

  • 排行榜

  • 标签115

  • 分类37

  • 归档320

  • 关于

  • 搜索

Pythonista中文文档:ui

发表于 2020-03-27 更新于 2021-10-29 分类于 计算机 , 技术 , Python 阅读次数: Valine:
本文字数: 42k 阅读时长 ≈ 38 分钟

Pythonista中文文档

ui — iOS原生GUI


介绍

  ui模块提供了用于在iOS上构建“原生”图形用户界面的组件。它是按照Apple的UIKit紧密建模的,但绝不是一个完整的包装器,它简化了框架的某些方面。

  该模块配有一个集成的UI设计工具,该工具可用于安排和配置GUI元素,而无需编写任何代码。


入门

  让我们从一个简单的例子开始。以下代码仅显示一个按钮,提示你“Tap me!”。当你点击它时,它将标题更改为“Hello”。

  尽管不是很有用,但此示例演示了ui模块的几个核心概念-基本视图布局,在屏幕上显示视图以及处理事件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import ui

def button_tapped(sender):
sender.title = 'Hello'

view = ui.View() # [1]
view.name = 'Demo' # [2]
view.background_color = 'white' # [3]
button = ui.Button(title='Tap me!') # [4]
button.center = (view.width * 0.5, view.height * 0.5) # [5]
button.flex = 'LRTB' # [6]
button.action = button_tapped # [7]
view.add_subview(button) # [8]
view.present('sheet') # [9]

  让我们更详细地看一下代码:

  1. 首先,我们创建一个View。这是几乎你可以在屏幕上放置的所有内容的基类。一个单纯的View只是一个彩色的矩形,但它也可以用作其他视图的容器(在这种情况下为一个按钮)。
  2. 我们将视图的名称设置为“Demo”,这是稍后显示视图时在标题栏中显示的名称。
  3. 视图的背景色设置为’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)。
  4. 我们创建一个新的Button,使用关键字参数设置其标题。在初始化期间设置标题时,其大小会自动调整为合适。
  5. 通过设置View.center属性,我们可以设置按钮相对于其父按钮的位置。在这种情况下,我们使用父项View.width和View.height属性的一半来使按钮居中。
  6. 由于视图可能会更改其大小(例如,旋转设备时),因此我们设置了View.flex控制其自动调整大小行为的按钮属性。在这种情况下,我们希望左,右,上和下边距灵活,以便按钮在其容器中居中。
  7. 我们将按钮的Button.action属性设置为脚本顶部定义的函数。该函数必须接受一个通常称为sender的参数。参数将是触发事件的按钮,因此你可以对多个按钮使用单个操作,并根据引起事件的按钮来确定要执行的操作。
  8. 我们已经完成了按钮的设置,因此可以使用View.add_subview()方法将其添加为容器视图的子级。
  9. 最后,我们调用View.present()方法以在屏幕上显示主视图。视图可以以不同的样式呈现。在iPhone上,所有的视图都在全屏展示,但在iPad上,你可以选择’sheet‘,’popover‘和’fullscreen‘。

使用UI设计器

  如果你经历了上面的示例,你可能会认为这是用很多代码去执行非常基本的操作。通过使用附带的可视UI编辑器,可以大大减少样板代码的数量。

  首先在你的媒体库中创建一个新的“User Interface”文件。然后,你可以将小部件添加到画布,在其周围拖动它们,调整它们的大小,并使用“Attributes...”检查器配置其他参数。

  你可以这样重新创建上面的示例:

  1. 点击“+”添加按钮。
  2. 将其拖动到画布的中心(它将对齐到自动对齐参考线)。
  3. 从按钮的上下文菜单中选择“Edit Title”,然后输入“Tap me!” (或你喜欢的任何内容)。
  4. 最后,打开“Attributes...”检查器(从按钮的菜单,或通过点击(i)按钮),然后导航到“Frame / Auto-Resizing”部分。检查所有页边距(但不检查“Width”或“Height”)。这样可以确保按钮在其容器中居中。
  5. 仍在检查器中,将按钮的动作设置为button_tapped(仅函数名称,不带任何括号或参数)。
  6. 为了使下面的代码按原样工作,请将UI文件重命名为“My UI”。
1
2
3
4
5
6
import ui

def button_tapped(sender):
sender.title = 'Hello'

ui.load_view('My UI').present('sheet')

  该代码段做的事与第一个示例完全相同,但是代码更少。该按钮的属性已在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
2
3
4
5
6
7
8
9
10
11
import ui
import console

@ui.in_background
def button_tapped(sender):
alert_result = console.alert('Title', 'Message', 'Button 1', 'Button 2')
sender.title = 'Button ' + str(alert_result)

button = ui.Button(title='Tap me!')
button.action = button_tapped
button.present('sheet')

建立自己的视图

  通过继承View,你可以实现自定义触摸处理和绘图。View是ui模块中唯一可继承的类,自定义视图可以实现许多方法来定义其行为和外观。

  也可以将自定义视图添加到使用UI设计工具直观创建的UI。只需将检查器中的“Custom View Class”属性设置为你的类的名称(在加载视图时必须定义此名称)。

  下面的示例显示了自定义视图可以实现的所有方法。请注意,你不必全部实现它们,例如,如果你没有特殊的布局要求或不想处理触摸,则可以省略layout和touch_...方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import ui

class MyView (ui.View):
def __init__(self):
# 当视图从UI文件中加载时不带参数。
# 你可以不用调用父类构造函数。
# 注意,这将在UI文件中的属性被设置之前调用。
# 实现`did_load`以在UI文件被完全加载后来自定视图
pass

def did_load(self):
# 这将会在一个视图从UI文件被完全加载后调用
pass

def will_close(self):
# 这将在一个以显示的试图即将关闭时调用。
# 你可能会想在这里执行一些数据存储的操作。
pass

def draw(self):
# 这将会在视图的内容需要被绘制时调用。
# 你可以使用任何ui模块的绘制函数在该视图的可视范围内渲染内容。
# 不要直接调用该函数,如果你想要绘制任何内容,
# 请使用set_needs_display()作为代替
# 示例:
path = ui.Path.oval(0, 0, self.width, self.height)
ui.set_color('red')
path.fill()
img = ui.Image.named('ionicons-beaker-256')
img.draw(0, 0, self.width, self.height)

def layout(self):
# 该函数将会在视图尺寸改变时被调用。
# 如果你的布局要求无法通过标准的自动调整大小(flex)属性来满足,
# 则通常应在此处设置视图子视图的frame。
pass

def touch_began(self, touch):
# 当一个触摸开始时被调用。
pass

def touch_moved(self, touch):
# 当一个触摸移动时被调用。
pass

def touch_ended(self, touch):
# 当一个触摸结束时被调用。
pass

def keyboard_frame_will_change(self, frame):
# 当屏幕上的键盘出现/消失时调用。
# 注意:frame是屏幕内坐标。
pass

def keyboard_frame_did_change(self, frame):
# 当屏幕上的键盘出现/消失时调用。
# 注意:frame是屏幕内坐标。
pass

v = MyView()
v.present('sheet')

视图动画

  许多View属性的变化可以动画化。例如,你可以设置View.frame属性以平滑的动画更改其大小和位置,或View.alpha控制淡入/淡出动画。

  首先,你必须编写一个函数来描述要应用的更改。这通常是一个内部函数。然后,你可以将此函数的引用传递给animate()函数,还可以选择传递动画的持续时间和延迟:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import ui

# 按钮的动作:
def button_tapped(sender):
def animation():
sender.alpha = 0.0 # 淡出
ui.animate(animation, duration=1.0)

# 建立并显示只有一个按钮的视图:
v = ui.View(background_color='white')
button = ui.Button(title='Tap me!')
button.action = button_tapped
v.add_subview(button)
v.present('sheet')

绘画上下文

  ui模块包含几个用于绘制图像,形状和文本的函数。由于他们需要知道在哪里绘制(在哪个视图中,或绘制成图片…),因此需要在调用它们之前设置绘制上下文。

  基本上有两种方法可以做到这一点:

  1. 当你处于重载的draw方法中(在自定义View子类中)时,已经设置了绘图上下文,并且所有绘图函数都将定向到该视图。
  2. 当你想要绘制成图片时(例如,用于将图形缓存或保存到磁盘),你必须设置一个ImageContext实现为上下文的管理器。一个ImageContext定义画布大小,并允许你完成绘图时获取所产生的Image对象。

  这是一个在白色背景上绘制一个红色圆圈,然后在控制台中显示生成的图像的示例:

1
2
3
4
5
6
7
8
9
10
import ui

with ui.ImageContext(100, 100) as ctx:
ui.set_color('white')
ui.fill_rect(0, 0, 100, 100)
ui.set_color('red')
circle = ui.Path.oval(10, 10, 80, 80)
circle.fill()
img = ctx.get_image()
img.show()

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
2
3
4
5
6
7
8
9
10
11
12
13
14
# 作为函数:
def button_tapped(sender):
print('button tapped')

# 作为方法:
class MyButtonHandler (object):
def button_tapped(self, sender):
print('button tapped')

button = ui.Button()
button.action = button_tapped
# 或者:
handler = MyButtonHandler()
button.action = handler.button_tapped

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
2
3
4
class MyScrollViewDelegate (object):
def scrollview_did_scroll(self, scrollview):
# 你可以根据content_offset属性来决定当前滑动的位置
pass

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class MyTableViewDataSource (object):
def tableview_number_of_sections(self, tableview):
# 范围区域的数目(默认值为1)
return 1

def tableview_number_of_rows(self, tableview, section):
# 返回区域中的行数
return 0

def tableview_cell_for_row(self, tableview, section, row):
# 为给定的区域/行创建一个单元格
cell = ui.TableViewCell()
cell.text_label.text = 'Foo Bar'
return cell

def tableview_title_for_header(self, tableview, section):
# 返回给定区域的标题
# 如果该方法没有被实现,则不会显示任何区域标题
return 'Some Section'

def tableview_can_delete(self, tableview, section, row):
# 如果允许用户删除给定的行则返回True
return True

def tableview_can_move(self, tableview, section, row):
# 如果应该显示给定行的重新排序控件(在编辑模式下),则返回True。
return True

def tableview_delete(self, tableview, section, row):
# 当用户确定删除给定行时被调用
pass

def tableview_move_row(self, tableview, from_section, from_row, to_section, to_row):
# 当用户使用重新排序控件移动行时调用(在编辑模式下)。
pass

TableView.delegate
  列表视图的代理可以是实现以下定义的方法的任何对象。代理不需要实现所有方法,当未实现方法时,列表视图将使用默认行为。

  有关一般意义上的代理概念的更多信息,请参见动作和代理。

代理方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
class MyTableViewDelegate (object):
def tableview_did_select(self, tableview, section, row):
# 当一个行被选中时调用
pass

def tableview_did_deselect(self, tableview, section, row):
# 当一个行被取消选中时调用。(多行选择模式下)
pass

def tableview_title_for_delete_button(self, tableview, section, row):
# 为'swipe-to-***'按钮返回一个标题。
#(译者注:也就是向左滑动单元格后右端显示的红色按钮)
return 'Delete'

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
2
3
4
5
6
7
8
9
10
11
12
13
class MyTextViewDelegate (object):
def textview_should_begin_editing(self, textview):
return True
def textview_did_begin_editing(self, textview):
pass
def textview_did_end_editing(self, textview):
pass
def textview_should_change(self, textview, range, replacement):
return True
def textview_did_change(self, textview):
pass
def textview_did_change_selection(self, textview):
pass

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
2
3
4
5
6
7
8
9
10
11
12
13
class MyTextViewDelegate (object):
def textview_should_begin_editing(self, textview):
return True
def textview_did_begin_editing(self, textview):
pass
def textview_did_end_editing(self, textview):
pass
def textview_should_change(self, textview, range, replacement):
return True
def textview_did_change(self, textview):
pass
def textview_did_change_selection(self, textview):
pass

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
2
3
4
5
6
7
8
9
class MyWebViewDelegate (object):
def webview_should_start_load(self, webview, url, nav_type):
return True
def webview_did_start_load(self, webview):
pass
def webview_did_finish_load(self, webview):
pass
def webview_did_fail_load(self, webview, error_code, error_msg):
pass

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
2
3
4
5
6
7
import ui
with ui.ImageContext(100, 100) as ctx:
oval = ui.Path.oval(0, 0, 100, 100)
ui.set_color('red')
oval.fill()
img = ctx.get_image()
img.show()

图像上下文的方法

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
2
3
4
5
6
7
8
import ui

with ui.ImageContext(100, 100) as ctx:
with ui.GState():
ui.concat_ctm(ui.Transform.rotation(0.78))
ui.draw_string(' Rotated text')
ui.draw_string('Not rotated')
ctx.get_image().show()

数据资源列表

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
2
3
4
5
6
7
8
9
10
11
import ui
import console

@ui.in_background
def button_tapped(sender):
alert_result = console.alert('Title', 'Message', 'Button 1', 'Button 2')
sender.title = 'Button ' + str(alert_result)

button = ui.Button(title='Tap me!')
button.action = button_tapped
button.present('sheet')

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=(‘‘, 12), alignment=ui.ALIGN_LEFT, line_break_mode=ui.LB_WORD_WRAP)
  使用draw_string()绘制字符串,并返回字符串的尺寸(width, height)。

  当max_width参数设置为零(默认值)时,图形的宽度不受限制(即,如果没有手动换行符,将在单行上绘制)。

ui.draw_string(string, rect=(0, 0, 0, 0), font=(‘‘, 12), color=’black’, alignment=ui.ALIGN_LEFT, line_break_mode=ui.LB_WORD_WRAP)
  在给定的矩形中绘制一个字符串。如果矩形的大小为零,则图形将使用其原点作为图形位置,但是大小不受限制。

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_CLEAR
R = 0

ui.BLEND_COPY
R = S

ui.BLEND_SOURCE_IN
R = S*Da

ui.BLEND_SOURCE_OUT
R = S*(1 - Da)

ui.BLEND_SOURCE_ATOP
R = S*Da + D*(1 - Sa)

ui.BLEND_DESTINATION_OVER
R = S*(1 - Da) + D

ui.BLEND_DESTINATION_IN
R = D*Sa

ui.BLEND_DESTINATION_OUT
R = D*(1 - Sa)

ui.BLEND_DESTINATION_ATOP
R = S*(1 - Da) + D*Sa

ui.BLEND_XOR
R = S*(1 - Da) + D*(1 - Sa). 这种XOR模式名义上仅与经典的位图XOR操作相关,而Quartz 2D不支持这种操作。

ui.BLEND_PLUS_DARKER
R = MAX(0, 1 - ((1 - D) + (1 - S)))

ui.BLEND_PLUS_LIGHTER
R = 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
  始终将图像绘制为模板图像,而忽略其颜色信息。用于有色按钮等。

-------- 本文结束 感谢阅读 --------
相关文章
  • Pythonista中文文档:scene
  • Pythonista中文文档:cb
  • Pythonista中文文档:contacts
  • Pythonista中文文档:canvas
  • Pythonista中文文档:photos
觉得文章写的不错的话,请我喝瓶怡宝吧!😀
SiriYang 微信支付

微信支付

SiriYang 支付宝

支付宝

  • 本文标题: Pythonista中文文档:ui
  • 本文作者: SiriYang
  • 创建时间: 2020年03月27日 - 15时03分
  • 修改时间: 2021年10月29日 - 18时10分
  • 本文链接: https://blog.siriyang.cn/posts/20200327153709id.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
Python Pythonista 文档
Pythonista中文文档:console
Pythonista中文教程
  • 文章目录
  • 站点概览
SiriYang

SiriYang

努力搬砖攒钱买镜头的摄影迷
320 日志
33 分类
88 标签
RSS
GitHub E-Mail
Creative Commons
Links
  • 友情链接
  • 作品商铺

  1. ui — iOS原生GUI
    1. 介绍
    2. 入门
    3. 使用UI设计器
    4. 动作和代理
    5. 建立自己的视图
    6. 视图动画
    7. 绘画上下文
    8. API参考——视图类
      1. 视图
        1. 视图属性
        2. 视图方法
      2. 按钮
        1. 按钮属性
      3. 按钮部件
        1. 按钮部件属性
      4. 图像视图
        1. 图像视图属性
        2. 图像视图方法
      5. 标签
        1. 标签属性
      6. 导航视图
        1. 导航视图的属性
        2. 导航视图的方法
      7. 滚动视图
        1. 滚动视图的属性
      8. 分段控制
        1. 分段控制的属性
      9. 滑块
        1. 滑块的属性
      10. 开关
        1. 开关的属性
      11. 列表视图
        1. 列表视图属性
        2. 列表视图方法
      12. 列表视图单元格
        1. 列表视图单元格属性
      13. 文本输入区域
        1. 文本输入区域的属性
        2. 文本输入区域的方法
      14. 文本视图
        1. 文本视图的属性
        2. 文本视图的方法
      15. 网页视图
        1. 网页视图的属性
        2. 网页视图的方法
      16. 日期选择器
        1. 日期选择器的属性
      17. 活动指示器
        1. 活动指示器的属性
        2. 活动指示器的方法
    9. API参考——其他类
      1. 图像
        1. 图像的属性
        2. 图像的类方法
        3. 图像的方法
      2. 图像上下文
        1. 图像上下文的方法
      3. 路径
        1. 路径的属性
        2. 路径的类方法
        3. 路径的方法
      4. 触摸
        1. 触摸的属性
      5. 变换
        1. 变换的类方法
        2. 变换的方法
      6. 全局状态
      7. 数据资源列表
        1. 数据资源列表属性
    10. API参考——函数
      1. 工具函数
      2. 绘画函数
    11. API参考——常量
      1. 混合模式
      2. 线冒样式
      3. 线段连接样式
      4. 键盘类型
      5. 视图内容模式
      6. 文本行超出模式
      7. 文本对齐
      8. 文本自动大写
      9. 日期选择器模式
      10. 活动指示器样式
      11. 图像渲染模式
蜀ICP备19008337号 © 2019 – 2025 SiriYang | 1.7m | 25:41
0%