【发布时间】:2013-11-09 14:31:21
【问题描述】:
我正在尝试使用计时器和函数的输出来更新一些静态文本。
代码在这里:code。
我对 wxPython 知之甚少,这是我无法了解的众多事情之一,这令人抓狂,如果我将 apper 的输出打印到控制台,它就可以完美运行,我只想要做的是将控制台打印出来的内容应用于文本。
我做错了什么?
【问题讨论】:
我正在尝试使用计时器和函数的输出来更新一些静态文本。
代码在这里:code。
我对 wxPython 知之甚少,这是我无法了解的众多事情之一,这令人抓狂,如果我将 apper 的输出打印到控制台,它就可以完美运行,我只想要做的是将控制台打印出来的内容应用于文本。
我做错了什么?
【问题讨论】:
定时器使用起来很麻烦,更简单的方法是使用函数wx.CallAfter 和/或wx.CallLater - 这些函数也是线程安全的,可用于从其他工作线程调用 GUI 线程上的函数线程。这是一个示例...
import random
import wx
class Frame(wx.Frame):
def __init__(self):
super(Frame, self).__init__(None)
self.SetTitle('Title')
panel = wx.Panel(self)
style = wx.ALIGN_CENTRE | wx.ST_NO_AUTORESIZE
self.text = wx.StaticText(panel, style=style)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.AddStretchSpacer(1)
sizer.Add(self.text, 0, wx.EXPAND)
sizer.AddStretchSpacer(1)
panel.SetSizer(sizer)
self.on_timer()
def on_timer(self):
self.text.SetLabel(str(random.randint(0, 100)))
wx.CallLater(1000, self.on_timer)
if __name__ == '__main__':
app = wx.App()
frame = Frame()
frame.Show()
app.MainLoop()
【讨论】:
on_timer 中,wx.CallLater 用于安排在一秒(1000 毫秒)内对该函数的另一次调用。