2012-02-21 20 views
1

我正在使用進度條來通知用戶完成文件搜索的進度。在實現這一點時,它似乎是當時最合乎邏輯的選擇,可以獲取要搜索的文件數量,然後根據該數字創建一個範圍,並根據已搜索的文件進行處理。它似乎工作,但現在我注意到文件搜索完成之前進度條已經最大化了。我是一名Python初學者,因此歡迎任何關於如何提高效率的建議。如何使用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郵件列表。 – 2012-02-22 14:47:22

+0

@Mike Driscoll實際上,它在完成之前大約需要20-30秒。 – suffa 2012-02-22 17:02:02

+0

也許你需要放入一些日誌或打印語句來看看發生了什麼。文件名稱的打印是否與進度對話框的更新相對應?如果不是,你的代碼中正在發生一些事情。 – 2012-02-22 18:28:43

回答

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)