<p>这是一个迟来的答案,但我也有同样的问题,所以也许这对某些人还是有帮助的。在</p>
<p>基于<a href="http://python-xlib.sourceforge.net/doc/html/python-xlib_11.html#SEC10" rel="nofollow noreferrer">documentation</a>,可以使用Python的<a href="https://docs.python.org/3.7/library/select.html" rel="nofollow noreferrer">select module</a>接收带有超时的事件。在</p>
<p>使用select的解决方案基本上包括两个步骤:1)处理所有挂起的事件,2)等待<em>select</em>调用,直到新的I/O事件到达。如果没有事件到达,方法将在一段时间后超时。在</p>
<p>这样的事件循环可能如下所示:</p>
<pre class="lang-py prettyprint-override"><code>
# Main loop, handling events
def loop(self):
self.loop_cond = True
timeout=5 # timeout in seconds
while self.loop_cond:
# handle all available events
i = self.d.pending_events()
while i > 0:
event = self.display.next_event()
self.handle_event(event)
i = i - 1
# Wait for display to send something, or a timeout of one second
readable, w, e = select.select([self.display], [], [], timeout)
# if no files are ready to be read, it's an timeout
if not readable:
self.handle_timeout()
</code></pre>
<p>我用<a href="https://gist.github.com/stefanthaler/7f5541d45240e567cea6abcdc50c815e" rel="nofollow noreferrer">small example</a>创建了一个要点。在</p>