📜  如何在 kivy 小部件中添加拖动行为?

📅  最后修改于: 2022-05-13 01:55:26.686000             🧑  作者: Mango

如何在 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()


输出: