• wxPython使用Publisher实现进度条


      1 import time
      2 import wx
      3 from threading import Thread
      4 from wx.lib.pubsub import Publisher
      5 
      6 class ParseMML():
      7     souceFile=''
      8     targetFile=''
      9     progressNum=0
     10 
     11     def __init__(self):
     12         pass
     13 
     14     def run(self):
     15         for i in range(0,101,10):
     16             time.sleep(1)
     17             ParseMML.progressNum=i
     18             print(i)
     19 
     20 ########################################################################
     21 class TestThread(Thread):
     22     """Test Worker Thread Class."""
     23     #----------------------------------------------------------------------
     24     def __init__(self):
     25         """Init Worker Thread Class."""
     26         Thread.__init__(self)
     27         self.start()    # start the thread
     28     #----------------------------------------------------------------------
     29     def run(self):
     30         """Run Worker Thread."""
     31         # This is the code executing in the new thread.
     32         Thread(target=ParseMML().run).start()
     33         currentPro=0
     34         while True:
     35             pro = ParseMML.progressNum
     36             time.sleep(1)
     37             if pro==100:
     38                 break
     39             if pro>currentPro and pro <100:
     40                 wx.CallAfter(Publisher().sendMessage, "update", pro)
     41                 currentPro=pro
     42         wx.CallAfter(Publisher().sendMessage, "update", 100)
     43         wx.MessageBox("Done...", "message", wx.OK)
     44 
     45 ########################################################################
     46 class MyProgressDialog(wx.Dialog):
     47     """"""
     48     #----------------------------------------------------------------------
     49     def __init__(self):
     50         """Constructor"""
     51         wx.Dialog.__init__(self, None, title="Progress",size=(250,50))
     52         self.count = 0
     53         self.progress = wx.Gauge(self, range=100,size=(250,50))
     54         sizer = wx.BoxSizer(wx.VERTICAL)
     55 
     56         sizer.Add(self.progress, 0,wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL,0)
     57         self.SetSizer(sizer)
     58         # create a pubsub listener
     59         Publisher().subscribe(self.updateProgress, "update")
     60     #----------------------------------------------------------------------
     61     def updateProgress(self, msg):
     62         """
     63         Update the progress bar
     64         """
     65         self.count = msg.data
     66         if self.count >= 100:
     67             self.Destroy()
     68 
     69         self.progress.SetValue(self.count)
     70 
     71 ########################################################################
     72 class MyFrame(wx.Frame):
     73     #----------------------------------------------------------------------
     74     def __init__(self):
     75         wx.Frame.__init__(self, None, title="Progress Bar ...")
     76         # Add a panel so it looks the correct on all platforms
     77         panel = wx.Panel(self, wx.ID_ANY)
     78         self.btn = btn = wx.Button(panel, label="Start Thread")
     79         btn.Bind(wx.EVT_BUTTON, self.onButton)
     80         sizer = wx.BoxSizer(wx.VERTICAL)
     81         sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
     82         panel.SetSizer(sizer)
     83     #----------------------------------------------------------------------
     84     def onButton(self, event):
     85         """
     86         Runs the thread
     87         """
     88         btn = event.GetEventObject()
     89         btn.Disable()
     90         TestThread()
     91         dlg = MyProgressDialog()
     92         dlg.ShowModal()
     93         btn.Enable()
     94 #----------------------------------------------------------------------
     95 # Run the program
     96 if __name__ == "__main__":
     97     app = wx.App(False)
     98     frame = MyFrame()
     99     frame.Show()
    100     app.MainLoop()
  • 相关阅读:
    python 冒泡排序
    python链式调用REST API把参数放到URL中
    python assert断言用法
    python实现斐波那契数列
    Pycharm快捷键集合
    linux shell中$0,$?,$!等的特殊用法
    搭建邮箱服务器
    linux安装IB驱动方法
    Oracle:Redhat 7.4+Oracle Rac 11.2.0.4 执行root.sh报错处理
    Struts学习(一)
  • 原文地址:https://www.cnblogs.com/aloneblog/p/9572448.html
Copyright © 2020-2023  润新知