kivy 多次执行“on_release”命令

Posted

技术标签:

【中文标题】kivy 多次执行“on_release”命令【英文标题】:kivy executes "on_release"-command multiple times 【发布时间】:2018-07-13 19:44:06 【问题描述】:

为了触发图像的获取,我使用kivy-button 的on_release 函数。

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

问题: 有时,该功能会执行多次(拍摄多张图像),而显然只按了一次。

根据日志,我确信这是与 kivy 相关的问题(与相机等无关):on_release-函数中的日志条目在日志中出现多次。

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

欢迎任何有关如何调试或修复问题的提示。

【问题讨论】:

【参考方案1】:

我被同样的问题困扰了好几天!

你的代码中有这行吗?

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

如果是,则将其删除。

在触控设备上,触控会被触发多次。

希望它能帮助遇到同样问题的人。

【讨论】:

【参考方案2】:

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

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()

【讨论】:

以上是关于kivy 多次执行“on_release”命令的主要内容,如果未能解决你的问题,请参考以下文章

向 kivy 按钮添加 on_release 操作

python中的Kivy弹出窗口,按钮上有多个on_release操作

将 Kivy 列表项中的 on_release 绑定到函数

动态创建的 kivy 按钮立即运行 on_press 和 on_release

kivy:单击 1 次按钮触发多个功能

如何为 python kivy 绘画应用程序添加清除按钮