我使用QThread
(pyside)来处理X11上的全局热键。我有一些简单的while循环,看起来像:
while self.doRun:
event=root.display.next_event()
if event.type==X.KeyPress:
....
但是next_event()
是众所周知的等待实际事件。那么如何在不等待另一次按键的情况下停止循环呢?我在考虑通过Xlib用keypress发送假事件,但我不认为这是一个正确的方法。另外,该事件上的.terminate()
不是一个选项。。。在pyside中,它会导致整个应用程序崩溃:
Fatal Python error: This thread state must be current when releasing
有什么想法吗?在
这是一个迟来的答案,但我也有同样的问题,所以也许这对某些人还是有帮助的。在
基于documentation,可以使用Python的select module接收带有超时的事件。在
使用select的解决方案基本上包括两个步骤:1)处理所有挂起的事件,2)等待select调用,直到新的I/O事件到达。如果没有事件到达,方法将在一段时间后超时。在
这样的事件循环可能如下所示:
我用small example创建了一个要点。在
你可以发送一个关闭事件(在X11a destroy event也许?),更明确地说。另一个想法是先检查是否有任何事件等待处理:
但是这构成了busy-waiting,所以我选择第一个选项。在
相关问题 更多 >
编程相关推荐