目录
- 平移/缩放控件
- 用法
- 控件交互
- 自动置顶
- 缩放限制
- 行为
ScatterScatter.apply_transform()Scatter.auto_bring_to_frontScatter.bboxScatter.centerScatter.center_xScatter.center_yScatter.collide_point()Scatter.do_collide_after_childrenScatter.do_rotationScatter.do_scaleScatter.do_translationScatter.do_translation_xScatter.do_translation_yScatter.on_bring_to_front()Scatter.on_motion()Scatter.on_touch_down()Scatter.on_touch_move()Scatter.on_touch_up()Scatter.on_transform_with_touch()Scatter.posScatter.rightScatter.rotationScatter.scaleScatter.scale_maxScatter.scale_minScatter.to_local()Scatter.to_parent()Scatter.topScatter.transformScatter.transform_invScatter.translation_touchesScatter.xScatter.y
ScatterPlane
平移/缩放控件¶
Scatter 用于构建可交互的控件,这些控件可以在多点触控系统中通过两根或更多手指进行平移、旋转和缩放。
Scatter 拥有自身的矩阵变换:在绘制子部件之前会修改模型视图矩阵,并在绘制完成后恢复之前的矩阵。这使得可以对整个子部件树执行旋转、缩放和平移操作,而无需更改任何部件属性。这一特定行为使 Scatter 独具特色,但也有一些优点/限制需要考虑:
子组件相对于散点图(Scatter)进行定位,类似于
RelativeLayout。因此,在拖动散点图时,子组件的位置不会改变,只有散点图本身的位置会发生变化。散点图的大小不影响其子元素的大小。
如果你想要调整散点图(Scatter)的大小,请使用缩放(scale),而不是尺寸(size)(参见第2点)。缩放会同时变换散点图及其子元素,但不会改变其尺寸。
Scatter 不是一种布局。您必须自行管理子组件的大小。
对于触摸事件,scatter会在on_touch_down/move/up事件中自动从父矩阵转换为scatter矩阵。如果你手动处理这些操作,则需要使用:meth:`~kivy.uix.widget.Widget.to_parent`和:meth:`~kivy.uix.widget.Widget.to_local`方法。
用法¶
默认情况下,Scatter没有图形表示:它只是一个容器。其理念是将Scatter与其他部件结合使用,例如一个:class:~kivy.uix.image.Image:
scatter = Scatter()
image = Image(source='sun.jpg')
scatter.add_widget(image)
控件交互¶
默认情况下,所有交互都是启用的。您可以通过使用do_rotation、do_translation和do_scale属性来有选择地禁用它们。
禁用旋转:
scatter = Scatter(do_rotation=False)
好的,请发送需要翻译的英文内容。
scatter = Scatter(do_rotation=False, do_scale=False)
仅允许在x轴上进行平移:
scatter = Scatter(do_rotation=False, do_scale=False,
do_translation_y=False)
自动置顶¶
如果 Scatter.auto_bring_to_front 属性为 True,则当散点部件被触摸时,它会被从父部件中移除并重新添加(置于最前,位于父部件中所有其他部件之上)。当您操作多个散点部件且不希望活动部件被部分隐藏时,此功能非常有用。
缩放限制¶
我们使用的是双精度表示的32位矩阵。这意味着我们的缩放存在限制。在我们的实现中,无法进行无限缩小或放大。通常,你不会触及最小缩放比例(因为它在屏幕上不可见),但最大缩放比例为9.99506983235e+19(2^66)。
你也可以限制允许的最小和最大缩放比例:
scatter = Scatter(scale_min=.5, scale_max=3.)
行为¶
在 1.1.0 版本发生变更: 如果未启用任何控件交互,则触摸处理器将永远不会返回 True。
- class kivy.uix.scatter.Scatter(**kwargs)[源代码]¶
基类:
WidgetScatter 类。更多信息请参阅模块文档。
- 事件:
- on_transform_with_touch:
当散点图(Scatter)被用户触摸或多点触控(如平移或缩放)变换时触发。
- on_bring_to_front:
当散件被置于最前面时触发。
在 1.9.0 版本发生变更: 添加了 on_bring_to_front 事件。
在 1.8.0 版本发生变更: 新增了 on_transform_with_touch 事件。
- apply_transform(trans, post_multiply=False, anchor=(0, 0))[源代码]¶
通过应用“trans”变换矩阵(在其当前变换状态之上)来变换散点。结果矩阵可以在
transform属性中找到。- 参数:
- trans:
Matrix。 应用于散点图部件的变换矩阵。
- anchor:元组,默认值为 (0, 0)。
用作变换原点的点(使用局部控件空间)。
- post_multiply:布尔值,默认为 False。
如果为 True,则变换矩阵是后乘的(如同在当前变换之前应用)。
- trans:
使用示例:
from kivy.graphics.transformation import Matrix mat = Matrix().scale(3, 3, 3) scatter_instance.apply_transform(mat)
- auto_bring_to_front¶
如果为 True,该控件将自动被推送到父控件列表的顶部以进行绘制。
auto_bring_to_front是一个BooleanProperty,默认值为 True。
- bbox¶
widget 在父空间中的边界框:
((x, y), (w, h)) # x, y = lower left corner
bbox是一个AliasProperty。
- center¶
控件的中心位置。
center是 (center_x,center_y) 属性的ReferenceListProperty。
- center_x¶
控件的X中心位置。
center_x是 (x+width/ 2.) 的AliasProperty。
- center_y¶
控件的Y轴中心位置。
center_y是 (y+height/ 2.) 的AliasProperty。
- collide_point(x, y)[源代码]¶
检查点 (x, y) 是否位于控件的轴对齐边界框内。
- 参数:
- x:数值
点的x位置(在父坐标中)
- y:数值
点的y坐标(相对于父坐标)
- 返回:
一个布尔值。如果该点在边界框内,则为True,否则为False。
>>> Widget(pos=(10, 10), size=(50, 50)).collide_point(40, 40) True
- do_collide_after_children¶
如果为 True,则在将触摸事件分发给子组件之后,才会进行限制触摸在散件(Scatter)内部的碰撞检测。这样,您可以将子组件放置在散件的边界框之外,并且仍然能够触摸到它们。
do_collide_after_children是一个BooleanProperty,默认值为 False。在 1.3.0 版本加入.
- do_rotation¶
允许旋转。
do_rotation是一个BooleanProperty,默认值为 True。
- do_scale¶
允许缩放。
do_scale是一个BooleanProperty,默认值为 True。
- do_translation¶
允许在X轴或Y轴上进行平移。
do_translation是 (do_translation_x+do_translation_y) 的AliasProperty。
- do_translation_x¶
允许在X轴上进行平移。
do_translation_x是一个BooleanProperty,默认值为 True。
- do_translation_y¶
允许在Y轴上进行平移。
do_translation_y是一个BooleanProperty,默认值为 True。
- on_bring_to_front(touch)[源代码]¶
当触摸事件导致散件被带到父级前面时调用(仅当
auto_bring_to_front为 True 时)。- 参数:
- touch:
将散点图带到前台的触摸对象。
在 1.9.0 版本加入.
- on_motion(etype, me)[源代码]¶
当接收到一个运动事件时调用。
- 参数:
- etype:str
事件类型,取值为"begin"、"update"或"end"之一。
- me:
MotionEvent 收到运动事件
- 返回:
bool 类型,设为 True 可停止事件分发。
在 2.1.0 版本加入.
警告
这是一个实验性方法,只要此警告存在,它就仍处于实验阶段。
- on_touch_down(touch)[源代码]¶
接收触摸按下事件。
- 参数:
- touch:
MotionEvent类 收到触摸事件。该触摸位于父级坐标系中。关于坐标系统的讨论,请参阅
relativelayout。
- touch:
- 返回:
bool 如果为 True,触摸事件的派发将停止。如果为 False,事件将继续派发给控件树中的其余部分。
- on_touch_move(touch)[源代码]¶
接收触摸移动事件。触摸坐标位于父级坐标系中。
更多信息请参阅
on_touch_down()。
- on_touch_up(touch)[源代码]¶
接收触摸抬起事件。触摸坐标位于父级坐标系中。
更多信息请参阅
on_touch_down()。
- on_transform_with_touch(touch)[源代码]¶
当触摸事件已变换散件(scatter widget)时调用。默认情况下此操作不执行任何动作,但可被派生类重写,以响应用户输入引起的变换。
- 参数:
- touch:
触发变换的触摸对象。
在 1.8.0 版本加入.
- pos¶
控件的位置。
pos是 (x,y) 属性的ReferenceListProperty。
- right¶
控件的右侧位置。
right是 (x+width) 的AliasProperty。
- rotation¶
散点图逆时针方向旋转的度数。
rotation是一个AliasProperty,默认值为 0.0。
- scale¶
散点的缩放值。
scale是一个AliasProperty,默认值为 1.0。
- scale_max¶
允许的最大缩放因子。
scale_max是一个NumericProperty,默认值为 1e20。
- scale_min¶
允许的最小缩放因子。
scale_min是一个NumericProperty,默认值为 0.01。
- to_local(x, y, **k)[源代码]¶
将父级坐标转换为本地(当前控件)坐标。
关于坐标系统的详细信息,请参阅
relativelayout。- 参数:
- relative:布尔值,默认为 False
如果你想要将坐标转换为相对于控件的坐标,请将其设置为True。
- to_parent(x, y, **k)[源代码]¶
将局部(当前控件)坐标转换为父控件坐标。
关于坐标系统的详细信息,请参阅
relativelayout。- 参数:
- relative:布尔值,默认为 False
如果你想要将控件的相对位置转换为其父坐标,请将其设置为True。
- top¶
控件的顶部位置。
top是 (y+height) 的AliasProperty。
- transform¶
变换矩阵。
transform是一个ObjectProperty,默认值为单位矩阵。备注
该矩阵反映了当前变换矩阵的状态,但直接设置它将清除先前应用的变换。如需在考虑上下文的情况下应用变换,请使用
apply_transform方法。
- transform_inv¶
变换矩阵的逆矩阵。
transform_inv是一个ObjectProperty,默认值为单位矩阵。
- translation_touches¶
确定翻译是由单次触摸还是多次触摸触发的。此属性仅在
do_translation为 True 时生效。translation_touches是一个NumericProperty,默认值为 1。在 1.7.0 版本加入.
- x¶
控件的X坐标位置。
x是一个NumericProperty,默认值为 0。
- y¶
控件的Y坐标位置。
y是一个NumericProperty,默认值为 0。
- class kivy.uix.scatter.ScatterPlane(**kwargs)[源代码]¶
基类:
Scatter这本质上是一个无界的Scatter控件。它是一个便捷类,旨在简化对无限平面的处理。