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

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

    展开全部

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

报告相同问题?

悬赏问题

  • ¥15 能给我一些人生建议吗
  • ¥15 mac电脑,安装charles后无法正常抓包
  • ¥18 visio打开文件一直显示文件未找到
  • ¥15 请教一下,openwrt如何让同一usb储存设备拔插后设备符号不变?
  • ¥50 使用quartz框架进行分布式任务定时调度,启动了两个实例,但是只有一个实例参与调度,另外一个实例没有参与调度,不知道是为什么?请各位帮助看一下原因!!
  • ¥50 怎么获取Ace Editor中的python代码后怎么调用Skulpt执行代码
  • ¥30 fpga基于dds生成幅值相位频率和波形可调的容易信号发生器。
  • ¥15 R语言shiny包和ncdf4包报错
  • ¥15 origin绘制有显著差异的柱状图和聚类热图
  • ¥20 simulink实现滑模控制和pid控制对比,提现前者优势
手机看
程序员都在用的中文IT技术交流社区

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

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

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

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

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

客服 返回
顶部