2013-09-24 23 views
0

我試圖運行一個進度對話框,它不是簡單地在一個計時器上,而是基於上傳到服務器的文件的狀態進行更新。我不在乎進度條是如何呈現的,我只是希望它能夠準確反映它正在跟蹤的過程。我嘗試在thread.isAlive()上使用whileif,但在進程運行時,這不會給我一個活動欄。這裏是我使用的酒吧以及被調用的線程的源代碼。從單獨的線程wxPython更新進度對話框

class ProgBar(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(
      self, None, wx.ID_ANY, "Please wait." 
      ) 
     self.Centre() 
     max = 250 

     dlg = wx.ProgressDialog(
      "Please wait.", 
      "Please wait while your request is processed.", 
      maximum = max, 
      parent=self, 
      style = wx.PD_CAN_ABORT 
      |wx.PD_APP_MODAL 
      |wx.PD_AUTO_HIDE 
      ) 

     keepGoing = True 
     count = 0 

     while keepGoing and count < max: 
      count += 1 
      wx.MilliSleep(50) 

      if count >= max/2: 
       (keepGoing, skip) = dlg.Update(count) 
      else: 
       (keepGoing, skip) = dlg.Update(count) 

     dlg.Destroy() 

和線程...

def UploadToServer(self, event): 
    if PepTalkSource is None: 
     dlg = wx.MessageDialog(self, 
     "You must attach a Pep Talk file!", 
     "Missing Attachments!", wx.OK|wx.ICON_QUESTION) 
     result = dlg.ShowModal() 
     dlg.Destroy() 
    else: 
     if os.path.isdir(
     r"\\server\address\goes\here" 
     ): 
      ThreadOne = FuncThread(CopyMove,()) 
      ThreadOne.start() 
      dlg = ProgBar() 
      ThreadOne.join() 
     else: 
      dlg = wx.MessageDialog(self, 
      "The server could not be reached. Please visit the Help Menu.", 
      "Server Unavailable", wx.OK|wx.CANCEL|wx.ICON_QUESTION) 
      result = dlg.ShowModal() 
      dlg.Destroy() 

我甚至試過溝類,並插入對話直入,沒有運氣的功能。任何幫助將不勝感激。

回答

1

其實我剛寫了一篇這樣的事情在我的博客本月早些時候:

我想你需要的是wx.Gauge部件。您可以使用Python來確定正在上傳的文件的大小,並使用該信息來設置量表的範圍。然後你會想要在一個線程中自己上傳,但是要分塊。所以你也可以按照塊的形式讀取文件,例如1024K,並以相同的塊寫入服務器。每次寫入後,您都會更新進度欄。

+0

所以我假設我可以使用os.path.getsize()來處理文件的大小。問題雖然,我必須使用像範圍一樣的列表來循環遍歷文件,因爲它們上傳並以這種方式回覆到標準格式? – Benjooster

+0

好吧,那麼新問題。我一直在閱讀日誌記錄手冊,現在我實際上已經錯過了,我想到了我的腳本中實際執行的內容。我不會像複製那樣「上傳」。所有信息都將轉到映射到用戶驅動器上的sharepoint共享文檔文件夾中。對不起,在這個混亂。 – Benjooster

+0

我會使用os.stat來獲取每個文件的文件大小,然後總計它們並將其用於您的量表範圍。 –