wxPython StopWatch会不断显示计数时间?

时间:2011-11-20 02:03:19

标签: python wxpython

我尝试使用wxPython创建GUI计时器。单击“开始”按钮,计时器启动,标签显示计时器,将秒数计算为几分钟甚至几小时。 “停止”按钮可停止计时器。我不知道如何在标签中不断显示计时器。我尝试了一段时间的True循环,但似乎SetLabel()或Time()想要显示一次并等待循环结束。

import wx

class Timer(wx.Frame):

    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title, size=(400, 350))

        self.main()
        self.Centre()
        self.Show()

    def main(self):

        panel = wx.Panel(self)
        sizer = wx.GridBagSizer(5, 0)

        self.timer = wx.StopWatch()

        self.label = wx.StaticText(panel)
        sizer.Add(self.label, pos=(0, 0), flag=wx.ALIGN_CENTER)

        button_start = wx.Button(panel, label='Start')
        self.Bind(wx.EVT_BUTTON, self.OnStart, button_start)
        sizer.Add(button_start, pos=(1, 0), flag=wx.ALIGN_CENTER)

        button_stop = wx.Button(panel, label='Stop')
        self.Bind(wx.EVT_BUTTON, self.OnStop, button_stop)
        sizer.Add(button_stop, pos=(2, 0), flag=wx.ALIGN_CENTER)

        sizer.AddGrowableRow(0)
        sizer.AddGrowableRow(1)
        sizer.AddGrowableRow(2)
        sizer.AddGrowableCol(0)

        panel.SetSizer(sizer)

    def OnStart(self, event):

        self.timer.Start()
        while True:
            self.label.SetLabel(str(self.timer.Time()))

    def OnStop(self, event):

        self.timer.Pause()

if __name__ == '__main__':

    app = wx.App()
    Timer(None, 'Timer')
    app.MainLoop()

2 个答案:

答案 0 :(得分:1)

您永远不会从OnStart返回,因此事件循环将挂起,等待事件处理程序完成。所有事件处理程序都需要立即返回,以便可以处理其他事件。使用wx.Timer处理程序更新秒表标签。

答案 1 :(得分:0)

听起来你想从00:00:00开始算起来,对吧?您应该看看wxPython演示中的LEDNumberCtrl演示。其中的第三个例子与您正在寻找的非常相似。我认为你可以用最小的摆弄工作。