如何使用wxPython正确实现进度条

如何使用wxPython正确实现进度条,wxpython,progress-bar,Wxpython,Progress Bar,我正在使用进度条通知用户完成文件搜索的进度。在实现这一点时,获取要搜索的文件的数量,然后根据该数量创建一个范围,并根据已搜索的文件进行搜索,这似乎是当时最合乎逻辑的选择。这似乎是可行的,但现在我注意到,在文件搜索完成之前,进度条已达到最大值。我是一个Python新手,所以欢迎任何关于如何提高效率的建议 下面是我的代码: ... self.progress_bar = wx.Gauge(self.statusbar, -1, style=wx.GA_HORIZONTAL|wx.G

我正在使用进度条通知用户完成文件搜索的进度。在实现这一点时,获取要搜索的文件的数量,然后根据该数量创建一个范围,并根据已搜索的文件进行搜索,这似乎是当时最合乎逻辑的选择。这似乎是可行的,但现在我注意到,在文件搜索完成之前,进度条已达到最大值。我是一个Python新手,所以欢迎任何关于如何提高效率的建议

下面是我的代码:

    ...

    self.progress_bar = wx.Gauge(self.statusbar, -1, style=wx.GA_HORIZONTAL|wx.GA_SMOOTH)
    rect = self.statusbar.GetFieldRect(2)
    self.progress_bar.SetPosition((rect.x+2, rect.y+2))
    self.progress_bar.SetSize((rect.width-3, rect.height-4))

    self.progress_bar.Hide()

    ...


    count = 0
    count2 = 0
    for afile in filelist:
        (head, filename) = os.path.split(afile)
        if afile.endswith(".log") or afile.endswith(".txt"):
            count2 += 1
            self.progress_bar.Show()
            self.progress_bar.SetRange(numFiles)
            wx.CallAfter(self.progress_bar.SetValue, count2)
            f=ftp.open(afile, 'r')
            for i, line in enumerate(f.readlines()):
                result = regex.search(line)
                if self.shouldAbort:
                    return self.shouldAbort
                    break

我认为你应该这样做:

count = 0
count2 = 0
self.progress_bar.Show()
self.progress_bar.SetRange(len(filelist)
for afile in filelist:
    (head, filename) = os.path.split(afile)
    if afile.endswith(".log") or afile.endswith(".txt"):
        f=ftp.open(afile, 'r')
        for i, line in enumerate(f.readlines()):
            result = regex.search(line)
            if self.shouldAbort:
                return self.shouldAbort
                break
    count2 += 1
    self.progress_bar.SetValue(count2)

我认为你做得对。它是不是在完成之前就已经最大化了?这可能是一个时间问题,也可能是一个时间问题。你也应该考虑交叉邮寄到WXPython邮件列表。“Mike Driscoll,事实上,它在完成之前大约20-30秒。也许你需要把一些日志或打印语句放进去看看发生了什么。文件名的打印是否与进度对话框的更新相对应?如果没有,代码中会出现一些问题。