在GUI中按下鼠标时添加小部件-Kivy Python

时间:2019-05-28 18:34:05

标签: python user-interface kivy touch mouse

每次使用鼠标按下屏幕时,都无法在布局中添加和显示图像。

class Myszka(ClickAndGo, Widget):

    def on_touch_down(self, touch):
        super().build()
        flaga_path = os.path.join(self.img_path, "test.png")
        x, y = touch.pos
        self.flaga = Image(source=flaga_path, size_hint=(None, None), size=(64, 64),
                           pos=(round(x, 1), round(y, 1)))
        self.camlayout.add_widget(self.flaga)
        print(touch.pos)
  • 实际结果: 仅打印触摸位置,未显示图像。
  • 预期结果: 每次按下鼠标时都应该显示图像。

2 个答案:

答案 0 :(得分:0)

@ikolim

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout


class ClickAndGo(App):
    def build(self):
        self.camlayout = FloatLayout(size=(100,100))
        self.myszka = Myszka()

        self.camlayout.add_widget(self.myszka)

        return self.camlayout

class Myszka(ClickAndGo, Widget):

    def on_touch_down(self, touch):
        super().build()
        # test.png -> any image
        flaga_path = os.path.join(self.img_path, "test.png")
        x, y = touch.pos
        self.flaga = Image(source=flaga_path, size_hint=(None, None), size=(64, 64),
                           pos=(round(x, 1), round(y, 1)))
        self.camlayout.add_widget(self.flaga)
        print(touch.pos)

答案 1 :(得分:0)

问题

  

我每次在布局中添加和显示图像时遇到问题   我用鼠标按屏幕。

根本原因

由于在self.camlayout的方法on_touch_down()的{​​{1}}中添加了局部属性,因此未显示该图像。

解决方案

class Myszka()替换为self.camlayout.add_widget(self.flaga),即获取根实例(App.get_running_app().root.add_widget(self.flaga))。

摘要-py

camlayout

示例

以下示例说明了在class Myszka(Widget): def on_touch_down(self, touch): ... App.get_running_app().root.add_widget(self.flaga) 上单击鼠标的位置添加Image

main.py

FloatLayout

输出

Result