I've created a simple application to transfer files using Paramiko and SFTP. I also wanted to have a statusbar (a QLabel) to inform the user when I'm downloading/uploading stuff. So, my function to upload looks something like this:
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')
Notice that before starting the upload I change the statusbar to uploading, and when upload is done, I change it to upload finished.
However, what actually happens is that the "Uploading" message is never displayed on the label - it just goes straight to "Upload Finished". I suspect this is because the changes happen only after the function returns.
How do I get the label to change at the start of the upload process?
You might need to force processing of events after changing the label text. Try adding:
QApplication.processEvents()
after setting the label text.
Please note that for a reason not known to me, PyQt and PySide both tend to have problems with processEvents, which sometimes needs to be executed multiple times to take effect. So, if it does not work after adding a single processEvents(), try adding it twice, or even multiple times.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With