Wxpython中多线程任务的平滑进度条设置

首先是进度条的设置

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这个判断,否则会覆盖进度条走到头的值更改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值