kivy多次执行“on_release”命令

时间:2018-02-03 12:31:02

标签: python ubuntu kivy

要触发图像的采集,我使用kivy-buttonon_release - 函数。

因此,无论何时单击此按钮(或 - 因为使用触摸屏),都会使用gphoto2触发相机。

问题: 有时,该功能会被执行多次(拍摄多张图像),而且只清楚地按下一次。

根据日志,我有信心,这是一个与kivy相关的问题(与相机无关等):on_release - 功能中的记录条目在日志中多次出现。 / p>

我正在使用触摸屏在Ubuntu 14.04 LTS(64位)下使用kivy(版本1.9.0)和python(版本2.7.6)运行应用程序。

欢迎提供有关如何调试或解决问题的任何提示。

2 个答案:

答案 0 :(得分:0)

您可以在第一个释放事件开始时禁用该按钮,并且在拍摄照片的线程的末尾,再次启用该按钮。然后,您不会从该按钮执行多个事件,但仍允许主应用程序线程继续。

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
import time
import threading

Builder.load_string('''

<MyLayout>:
    Button:
        text: 'Print to terminal'
        on_release: 
            root.button_released(self)
''')


class MyLayout(BoxLayout):

    def button_released(self,button):
        button.disabled = True
        print("{} pressed!".format(button))
        threading.Thread(target=self.take_picture, args=(button,)).start()

    def take_picture(self,button):
        time.sleep(1)  # taking picture or whatever
        button.disabled = False

class MyApp(App):

    def build(self):
        return MyLayout()


MyApp().run()

答案 1 :(得分:0)

我被困在同一个问题上好几天了!

您的代码中是否有此行?

Config.set('input', 'mouse', 'mouse, multitouch_on_demand')

如果是,则将其删除。

在触摸设备上,触摸被触发多次。

希望它可以帮助遇到相同问题的人。