如何在 kivy 小部件中添加拖动行为?
在本文中,我们将使用Python 的kivy 框架开发一个 GUI 窗口,我们将在该窗口上添加一个具有拖动行为的 Label
注意:您也可以按照相同的模式在其他小部件上实现拖动事件。
方法:
实际上我们所做的只是使用继承的概念,通过结合Kivy Label 小部件的属性和Kivy 的DragBehaviour 类,我们正在制作一个新的小部件(DraggableLabel)。并且从代码中可以看出我们定义了三个属性
- drag_rectangle:它是我们要启用拖动的区域,您可以从代码中看到我们使用此属性的值,因为我们希望在整个布局中启用拖动。
- drag_timeout:它指定了如果未拖动 Label 时将禁用从 Label 拖动的时间,但如果我们开始拖动,它将再次起作用。
- drag_distance:拖动 DragBehavior 之前移动的距离,以像素为单位。一旦移动了距离,DragBehavior 就会开始拖动,并且不会将触摸事件分派给孩子们。
在定义属性之后,我们只是像使用其他小部件一样使用我们新创建的小部件。
下面是实现:
Python3
from kivy.app import App
from kivy.uix.label import Label
# importing builder from kivy
from kivy.lang import Builder
from kivy.uix.behaviors import DragBehavior
# using this class we will combine
# the drag behaviour to our label widget
class DraggableLabel(DragBehavior, Label):
pass
# this is the main class which
# will render the whole application
class uiApp(App):
# method which will render our application
def build(self):
return Builder.load_string("""
:
drag_rectangle: self.x, self.y, self.width, self.height
drag_timeout: 10000
drag_distance: 0
DraggableLabel:
text:"[size=40]GeeksForGeeks[/size]"
markup:True
""")
# running the application
uiApp().run()
输出: