【问题标题】:wxPython update StaticText every x seconds/minutes using timerwxPython使用计时器每x秒/分钟更新一次StaticText
【发布时间】:2013-11-09 14:31:21
【问题描述】:

我正在尝试使用计时器和函数的输出来更新一些静态文本。

代码在这里:code

我对 wxPython 知之甚少,这是我无法了解的众多事情之一,这令人抓狂,如果我将 apper 的输出打印到控制台,它就可以完美运行,我只想要做的是将控制台打印出来的内容应用于文本。

我做错了什么?

【问题讨论】:

    标签: python wxpython wxwidgets


    【解决方案1】:

    定时器使用起来很麻烦,更简单的方法是使用函数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 毫秒)内对该函数的另一次调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多