Python 为什么wx.Yield()不起作用?
我很清楚/熟悉如何在wxPython中处理(使用Python 为什么wx.Yield()不起作用?,python,wxpython,Python,Wxpython,我很清楚/熟悉如何在wxPython中处理(使用threading.Thread工作正常)。但我总是想知道,为什么wx.Yield()和它的兄弟姐妹不能工作(或者如何正确使用它们) 附上一个(并非如此)最小示例,使用4.0.0a2 msw(凤凰城)进行测试: 编辑:发生了什么: 处理wx.CallAfter事件 按钮事件已注册,但只有在long\u running完成后,才会在GUI中处理 我的问题是: wx.Yield是否允许处理堆积的事件 这个例子能否与wx.Yield一起使用?如果是
threading.Thread
工作正常)。但我总是想知道,为什么wx.Yield()
和它的兄弟姐妹不能工作(或者如何正确使用它们)
附上一个(并非如此)最小示例,使用4.0.0a2 msw(凤凰城)
进行测试:
编辑:发生了什么:
- 处理
事件wx.CallAfter
- 按钮事件已注册,但只有在
完成后,才会在GUI中处理long\u running
是否允许处理堆积的事件wx.Yield
- 这个例子能否与wx.Yield一起使用?如果是,如何使用
- 如果没有,为什么它不起作用
long\u running
是在app.MainLoop()有机会处理事件之前启动的。现在确保在主循环之后启动长时间运行的
wx.Yield()
是允许处理wx事件循环的正确方法def long_running(handler):
for i in range(10):
thetxt = '{0}: {1}'.format(str(datetime.now()), str(i))
sleep(1) # using this as drop-in for something which is blocking
wx.CallAfter(handler, thetxt)
wx.Yield()
…
if __name__ == '__main__':
…
wx.CallLater(1500, long_running, handler.update_prog)
app.MainLoop()
def long_running(handler):
for i in range(10):
thetxt = '{0}: {1}'.format(str(datetime.now()), str(i))
sleep(1) # using this as drop-in for something which is blocking
wx.CallAfter(handler, thetxt)
wx.Yield()
…
if __name__ == '__main__':
…
wx.CallLater(1500, long_running, handler.update_prog)
app.MainLoop()