weixin_45367495 2021-06-09 08:34 采纳率: 87%
浏览 312
已采纳

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 09: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()

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败