Как правильно реализовать индикатор выполнения с помощью wxPython

Я использую индикатор выполнения, чтобы информировать пользователя о ходе выполнения поиска файла. При реализации этого в то время казалось наиболее логичным выбором получить количество файлов для поиска, затем создать диапазон на основе этого числа и продвигаться в соответствии с файлами, которые были найдены. Казалось, это сработало, но теперь я замечаю, что индикатор выполнения достигает максимума до завершения поиска файла. Я новичок в 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

person suffa    schedule 21.02.2012    source источник
comment
Я думаю, ты делаешь это правильно. Это максимизируется прямо перед тем, как это будет сделано? Это может быть проблема со временем или проблема с разницей. Вам также следует подумать о перекрестной публикации в списке рассылки wxPython.   -  person Mike Driscoll    schedule 22.02.2012
comment
@Mike Driscoll На самом деле, это происходит примерно за 20-30 секунд до того, как это будет сделано.   -  person suffa    schedule 22.02.2012
comment
возможно, вам нужно поместить некоторые операторы регистрации или печати, чтобы увидеть, что происходит. Соответствует ли печать имен файлов обновлениям в диалоговом окне прогресса? Если нет, то что-то происходит в вашем коде.   -  person Mike Driscoll    schedule 22.02.2012


Ответы (1)


Я думаю, вы должны сделать это следующим образом:

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)
person BrtH    schedule 06.03.2012