kivy如何应对点击事件?

2024-06-28 20:46:39 发布

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

我正在尝试用kivy和python开发一个图灵机器模拟器,我得到了基本的GUI设置。但是当我点击顶部栏和侧栏的按钮时,on_touch_down()函数有点超载了on_press()函数。我该怎么解决呢? 所以我想要的是,当我点击舞台区域的任何地方时,会调用on_touch_down()函数并打印坐标;当我单击任何按钮时,会调用on_press()函数,而不会打印任何内容。 这是我的代码:

在GUIDisplay.py在

from kivy.uix.floatlayout import FloatLayout
from kivy.app import App
from kivy.clock import Clock
from kivy.properties import *

class RootWidget(FloatLayout):

    def add_transition_toggle(self):
        print 'something happened'

    def change_tape(self):
        pass

    def backgroundpress(self):
        print 'region'

    def actionbuttonpress(self):
        print 'menu'
    def on_touch_down(self, touch):
        print touch.x, touch.y


class GUIDisplay(App):

    def build(self):
        app = RootWidget()
        return app


def start_app():
    GUIDisplay().run()

if '__main__' == __name__:
    start_app()

在圭显示器.kv在

^{pr2}$

Tags: 函数fromimportselfappondef按钮
1条回答
网友
1楼 · 发布于 2024-06-28 20:46:39

我会第一个承认这很难看,所以也许其他人可以找到更好的方法。据我所知,问题是RelativeLayout正在消化touch事件,因此没有将其传递到widget树中。所以你可以试着沿着这些线来检查孩子们是否消化了它(按下了一个按钮),如果没有,打印出x,y坐标。在

def on_touch_down(self, touch):
    event_handled = False
    for child in self.children:
        if not event_handled:
            if child.dispatch('on_touch_down', touch):
                event_handled = True

    if not event_handled:
        print touch.x, touch.y

希望这能帮助。。。在

相关问题 更多 >