weixin_45367495 2021-06-09 00:34 采纳率: 87%
浏览 316
已采纳

python建立窗体后,使用mainloop显示窗体,如何使用多线程在窗体中实时显示时间?

class MainForm(wx.Frame):

    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent,
                          id,
                          title="test",
                          pos=(200, 150),
                          size=(900, 600))
        MainForm_Panel = wx.Panel(self)
        MainForm_Font = wx.Font(11, wx.DEFAULT, wx.DEFAULT, wx.NORMAL)

        self.MainForm_SystemTime_Label = wx.StaticText(MainForm_Panel,
                                                       id,
                                                       label=datetime.datetime.now().strftime(GUIParameter.system_time),
                                                       pos=(705, 540),
                                                       style=wx.TE_RIGHT)
if __name__ == '__main__':
    app = wx.App()
    frame = MainForm(parent=None, id=-1)
    frame.Show()
    app.MainLoop()
  • 写回答

3条回答 默认 最新

  • CSDN专家-黄老师 2021-06-09 01:02
    关注

    你开的多线程,将窗口的对象作为参数传进去,然后修改对象的控件就行了

    import threading
    
    import wx
    import datetime
    class MainForm(wx.Frame):
    
        def __init__(self, parent, id):
            wx.Frame.__init__(self, parent,
                              id,
                              title="test",
                              pos=(200, 150),
                              size=(900, 600))
            self.id = id
            self.MainForm_Panel = wx.Panel(self)
            MainForm_Font = wx.Font(11, wx.DEFAULT, wx.DEFAULT, wx.NORMAL)
    
            self.MainForm_SystemTime_Label = wx.StaticText(self.MainForm_Panel,
                                                           self.id,
                                                           label=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                                                           pos=(705, 540),
                                                           style=wx.TE_RIGHT)
    
    def task(frame):
        while 1:
            frame.MainForm_SystemTime_Label.Label = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    
    if __name__ == '__main__':
        app = wx.App()
        frame = MainForm(parent=None, id=-1)
        frame.Show()
        t = threading.Thread(target=task, args=(frame,))
        t.setDaemon(True)
        t.start()
    
        app.MainLoop()

    如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    weixin_45367495 2021-06-09 01:20

    我将参数传进去,用while循环更新时间,可是这项做,线程就一直运行,最后窗体就加载不出来了...老师,来段代码吧,类似的也行

    回复
    CSDN专家-黄老师 回复 weixin_45367495 2021-06-09 02:16

    将你代码修改了,你看看

    1
    回复
    weixin_45367495 回复 CSDN专家-黄老师 2021-06-09 06:09

    非常棒,年费走起

    回复
查看更多回答(2条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部