首先是进度条的设置
class GuageFrame(wx.Frame):
def __init__(self, *args, **kw):
# ensure the parent's __init__ is called
super(GuageFrame, self).__init__(*args, **kw)
panel = wx.Panel(self, -1)
vbox = wx.BoxSizer(wx.VERTICAL)
self.info = wx.StaticText(panel, -1, "正在处理 ", (30, 7), style=wx.ALIGN_CENTRE)
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox2 = wx.BoxSizer(wx.HORIZONTAL)
hbox3 = wx.BoxSizer(wx.HORIZONTAL)
panel.SetBackgroundColour("white")
self.count = 0
self.gauge = wx.Gauge(panel, -1, 7000, size=(self.GetSize()[0]-100,400), style = wx.GA_HORIZONTAL)
self.gauge.SetBezelFace(3)
self.gauge.SetShadowWidth(3)
# self.gauge.Pulse()
self.info_button = wx.Button(panel, label="查看运行日志", size=(100, 50))
self.Bind(wx.EVT_BUTTON, self.check_log)
hbox1.Add(self.info, proportion=1, flag=wx.ALIGN_CENTRE)
hbox2.Add(self.gauge, proportion=1, flag=wx.ALIGN_CENTRE)
vbox.Add((0, 30))
vbox.Add(hbox1, flag=wx.ALIGN_CENTRE)
vbox.Add(hbox2, flag=wx.ALIGN_CENTRE)
panel.SetSizer(vbox)
self.Bind(wx.EVT_IDLE, self.OnIdle)
def OnIdle(self, event):
self.count = self.count + 1
if 6900 <= self.count < 7000:
self.count = 6900
self.gauge.SetValue(self.count)
当我们在运行一个线程,并且想实现在thread1线程运行结束时进度条直接走到100%。需要添加一个thread2线程用来监控thread1的运行情况,每隔1秒钟check_thread()便会进行一次判断thread1.is_alive()是否为True,用以改变进度条的状态
def check_thread():
for i in range(40): # range里是秒数
time.sleep(1)
if not thread1.is_alive():
frame.gauge.SetValue(7000)
frame.info.SetLabelText('完成!')
break
thread1 = myThread('python daily_report_GUI.py')
thread1.start()
thread2 = threading.Thread(target=check_thread)
thread2.start()
需要注意的一点是在进度条OnIdle()方法的设置中必需要加入self.count < 7000这个判断,否则会覆盖进度条走到头的值更改