如何在更新Window对象的wx.App MainLoop中添加计时器?

时间:2017-03-08 18:44:43

标签: 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/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中,一个Timer是一个线程,所以我将使用更好的任务(定时器或线程)。我想每N秒更新N个Window对象。

wx小部件有自己的定时器,但它们应绑定到Window对象,所以我需要N wx.widgets定时器用于N Window对象,而这不是我想要的。

1 个答案:

答案 0 :(得分:1)

避免使用计时器和创建自己的线程的简单解决方案是使用wx.CallLater

def poll(self):
   do_something()
   # waits 1 seconds before calling again
   wx.CallLater(1000, self.poll)