2015-06-04 59 views
3

我創建了一個簡單的應用程序來使用Paramiko和SFTP傳輸文件。我還希望有一個狀態欄(一個QLabel)在下載/上傳內容時通知用戶。所以,我的功能上傳看起來是這樣的:PyQt不更新標籤

def upload(self): 
     self.statusLabel.setText('Uploading') 
     local = str(self.uploadLineEdit.text()) 
     filename = os.path.basename(local) 
     remote = "/home/" + self.userName + "/testdata/" + filename 
     self.ftp.put(local, remote) 
     self.uploadedFileName = filename 
     self.statusLabel.setText('Upload Finished') 

注意,開始上傳前我更改狀態欄來上傳,當上傳成功後,我改變它上傳完成。

但是,實際發生的事情是,「上傳」消息從不顯示在標籤上 - 它直接轉到「上傳完成」。我懷疑這是因爲只有在函數返回後纔會發生更改。

如何在上傳過程開始時更改標籤?

回答

3

更改標籤文本後,您可能需要強制處理事件。嘗試添加:

QApplication.processEvents() 

設置標籤文本後。

請注意,由於我不知道的原因,PyQt和PySide都傾向於processEvents有問題,有時需要多次執行才能生效。因此,如果添加單個processEvents()後無法使用,請嘗試添加兩次,甚至多次。

+0

這項工作,+1提到我可能需要多次。 – hoodakaushal

+0

很高興幫助,繼續並接受答案然後:) –

+0

似乎有一個時間限制,所以我不能接受它,但會盡快我能夠。 – hoodakaushal