2012-02-21 2 views
1

Я использую индикатор выполнения, чтобы информировать пользователя о ходе завершения поиска файла. При реализации этого в то время он казался самым логичным выбором, чтобы получить количество файлов для поиска, затем создать диапазон на основе этого числа и прогресс в соответствии с обычными файлами. Казалось, это сработало, но теперь я замечаю, что индикатор выполнения заканчивается до завершения поиска файла. Я - неофит Питона, поэтому приветствуются любые предложения о том, как я могу сделать это более эффективным.Как правильно реализовать индикатор выполнения с помощью wxPython

Ниже мой код:

... 

    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 
+0

Я думаю, что вы все делаете правильно. Допускается ли это до того, как это будет сделано? Это может быть проблема сроков или проблема по отдельности. Вы также должны перечислить пересылку в список рассылки wxPython. –

+0

@Mike Driscoll На самом деле, он достигает 20-30 секунд, прежде чем это будет сделано. – suffa

+0

Возможно, вам нужно разместить некоторые записи или распечатать заявления, чтобы узнать, что происходит. Является ли печать имен файлов соответствующими обновлениям диалогового окна прогресса? Если нет, что-то происходит в вашем коде. –

ответ

0

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

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) 
Смежные вопросы