繁体   English   中英

在python程序中使用evdev和tkinter

[英]Using evdev and tkinter in a python program

我已经编写了一个使用gphoto2控制我的相机的python程序-这样我就可以创建一个photobooth。 我没有为用户提供键盘或鼠标作为输入,而是购买了一个xin-mo控制器,因此我可以提供一个简单的街机风格的按钮界面(拍照,拒绝照片,接受照片等)。

python程序是使用Tkinter编写的,我正在使用evdev从xin-mo中读取输入事件。 我用于xin-mo事件的代码如下:-

while True:

  for ev in device.read():
    print("Take photo")

它可以工作,按下按钮时我可以做些事情。

我不知道如何使evdev和Tkinter一起工作。 从我发现的结果来看,我需要调用mainloop来呈现GUI ...但是一旦进入mainloop,我如何从xin-mo控制器读取输入事件?

我是python的新手,所以我很可能会缺少一些明显的东西。

谢谢,史蒂夫。

只要evdev上的事件数量不是很大,就可以每隔几毫秒轮询一次。

大致而言,解决方案如下所示,它使用主事件循环代替了无限循环:

root = tk.Tk()
...
def poll_evdev():
    for ev in device.read():
        print("Take photo")
    # schedule the polling to occur every 100 ms
    root.after(100, poll_evdev)
...
# start the polling process
poll_evdev()

# start the GUI event loop
root.mainloop()

注意:如果轮询花费的时间超过几百毫秒,则将导致GUI滞后。 如果是这种情况,您可能需要在单独的线程中进行轮询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM