Python 如何在wx.App MainLoop中添加更新窗口对象的计时器?
有没有办法将计时器或挂钩放入MainLoop中,以便每1秒在某些wx窗口中调用一些方法 我可以在wx.Frame对象内放置计时器,但我想在这些对象外放置计时器。有没有办法做到这一点 如果我启动一个线程并尝试这样做,我会得到:Python 如何在wx.App MainLoop中添加更新窗口对象的计时器?,python,python-2.7,wxpython,wxwidgets,python-multithreading,Python,Python 2.7,Wxpython,Wxwidgets,Python Multithreading,有没有办法将计时器或挂钩放入MainLoop中,以便每1秒在某些wx窗口中调用一些方法 我可以在wx.Frame对象内放置计时器,但我想在这些对象外放置计时器。有没有办法做到这一点 如果我启动一个线程并尝试这样做,我会得到: self.updateThread = Thread(target = updateWindows, args=[self]) self.updateThread.start() app.MainLoop() Pango:ERROR:/build/pan
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()
:
屏幕上没有画任何东西
更新:澄清一下,在Python中,计时器是一个线程,所以我将使用对任务更好的方法(计时器或线程)。我想每N秒更新N个窗口对象
wx窗口小部件有自己的计时器,但它们应该绑定到窗口对象,所以我需要N个wx.widgets计时器用于N个窗口对象,这不是我想要的。一个避免使用计时器和创建自己线程的简单解决方案是使用
wx.CallLater
def poll(self):
do_something()
# waits 1 seconds before calling again
wx.CallLater(1000, self.poll)
你为什么需要一根线?你能不用它吗?你问的问题真的不清楚:你想用定时器还是线程,或者两者都用?你对计时器有什么确切的问题(提示:它们不在任何东西的内部或外部)?我会更新描述。基本上我想每X秒更新一次windows。计时器在Python中是一个线程,所以对于这个任务来说什么更好对我来说都是有用的。
def poll(self):
do_something()
# waits 1 seconds before calling again
wx.CallLater(1000, self.poll)