Kivy DragBehavior酒店最简单的方式。为什么不起作用?

2024-06-08 13:33:21 发布

您现在位置:Python中文网/ 问答频道 /正文

一切似乎都很好(根据文件)(我知道它不是),但它不可能移动我的图像对象。在

图像对象在BrickCanvas上是可见的,但可能是不可触摸的。我试着在图像对象上打印“on-hu-touch-down”事件之后的东西,但是在touch-down之后什么也没有发生。在

在备忘录千伏在

<BrickCanvas>:
    FloatLayout:
        Brick

    <Brick>:
        drag_rectangle: 100 , 100 , 100 , 100
        drag_timeout: 1000000000000000
        drag_distance: 0
        Image:
            size: (150,150)
            source: '/home/prezes/Desktop/KO.jpg'

在主.py在

^{pr2}$

Tags: 文件对象图像ontimeout事件备忘录down
1条回答
网友
1楼 · 发布于 2024-06-08 13:33:21

显然,DragBehavior只对所选的小部件有效,而不是它的子部件(在本例中它是一个Image),正如您可以用以下代码测试的那样:

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.behaviors import DragBehavior
from kivy.lang import Builder

Builder.load_string('''
<BrickCanvas>:
    FloatLayout:
        Brick

<Brick>:
    canvas:
        Color:
            rgb: 0.5, 0.5, 0.5
        Rectangle:
            size: self.size
            pos: self.pos

    Image:
        size: 50, 50
        source: 'test.png' # change to your path
''')

class BrickCanvas(Widget):
    pass

class Brick(DragBehavior,Widget):
    pass


class MemoApp(App):
    def build(self):
        return BrickCanvas()

if __name__ == '__main__':
    MemoApp().run()

您可以直接使用Image类来避免此问题:

^{pr2}$

我还是想说,对于图像的简单拖放功能,最好使用Scatter小部件:

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.scatter import Scatter
from kivy.lang import Builder

Builder.load_string('''
<BrickCanvas>:
    Brick

<Brick>:
    do_scale: False
    do_rotation: False
    Image
        source: 'test.png' # change to your path
''')

class BrickCanvas(Widget):
    pass

class Brick(Scatter):
    pass

class MemoApp(App):
    def build(self):
        return BrickCanvas()

if __name__ == '__main__':
    MemoApp().run()

相关问题 更多 >