wxPython秒表常量显示计时?

0 投票
2 回答
2241 浏览
提问于 2025-04-17 06:40

我正在尝试用wxPython创建一个图形界面的计时器。当点击“开始”按钮时,计时器开始工作,标签上会显示计时,秒数会逐渐增加,直到分钟,甚至可能到小时。当点击“停止”按钮时,计时器会停止。我不知道怎么让计时器一直在标签上显示。我试过用一个无限循环,但好像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

听起来你是想从00:00:00开始计时,对吧?你可以看看wxPython演示中的LEDNumberCtrl示例。里面的第三个例子跟你想要的很像。我觉得你只需要稍微调整一下就能让它正常工作。

1

你在OnStart这个函数里永远不会返回,所以事件循环就卡住了,等着这个事件处理程序完成。所有的事件处理程序都需要立即返回,这样其他的事件才能被处理。你可以使用一个wx.Timer处理程序来更新秒表的显示。

撰写回答