如何在wx.App MainLoop中添加一个更新Window对象的定时器?
问题描述:
有没有办法将定时器或钩子放到MainLoop中,以每1秒钟的速度调用某些wx窗口中的某些方法?如何在wx.App MainLoop中添加一个更新Window对象的定时器?
我可以把定时器放在一个wx.Frame对象中,但我想把一个定时器以外的那些对象放在之外。有没有办法做到这一点?
如果我启动一个线程,并尝试这样做,我得到:
self.updateThread = Thread(target = updateWindows, args=[self])
self.updateThread.start()
app.MainLoop()
Pango:ERROR:/build/pango1.0-EzEh0I/pango1.0-1.38.1/./pango/pango-layout.c:3925:pango_layout_check_lines: assertion failed: (!layout->log_attrs)
Aborted (core dumped)
并添加updateThread.join()
:
self.updateThread = Thread(target = updateWindows, args=[self])
self.updateThread.start()
self.updateThread.join()
app.MainLoop()
没有被绘制在屏幕上。
更新:澄清,在Python中一个计时器是一个线程,所以我会使用哪个更适合任务(计时器或线程)。我想每N秒更新N个Window对象。
wx小部件有它自己的计时器,但它们应该绑定到Window对象,所以我需要N个wx.widgets计时器用于N Window对象,这不是我想要的。
答
一个简单的解决方案,避免了使用定时器和创建你自己的线程是使用wx.CallLater
def poll(self):
do_something()
# waits 1 seconds before calling again
wx.CallLater(1000, self.poll)
为什么你需要一个线程?你可以没有它吗? – Igor
真的不清楚你在问什么:你想使用定时器或线程还是两者兼而有之?你对定时器有什么确切的问题(提示:它们不在任何内部或外部)? –
我会更新说明。基本上我想每隔X秒更新一次窗口。 Timer是Python中的一个线程,所以对于任务来说哪个更好。 – hhaamm