[PyQt] Problem with threaded ftp: Cannot queue arguments of type 'QUrlInfo'

Brian Knudson briank at pipelinefx.com
Wed Nov 21 01:31:49 GMT 2012

On Nov 20, 2012, at 11:44 AM, Brian Knudson wrote:

>>> Here's some example code (pardon the length).  I would like to be able
>> to
>>> print the listed files/urls from the function "lister".  Ultimately, I'd
>>> like to then have that function formulate new urls & pass them back to
>>> connectAndDownload to download each of the files (of course, this will
>>> require modifications to connectAndDownload, but we're not there yet).
>> Why use threads at all? QFtp is asynchronous and won't block. If you need
>> to do some blocking processing of the results then create threads for that.
> Hmm.  Good point.  I've tested this again in the main thread & it works as expected.
> FWIW, I had already written the threaded ftp for multiple ftp streams & was trying to reuse it for this purpose (hence the threads).  Assuming this is a Qt bug, I'll happily skip the threaded bit & move back to the main thread.

I may have spoken too soon.  While this works fine in my example script, when I put it in a QWizardPage, it doesn't run.  I suspect this has something to do with the event loop thinking it has completed (or hasn't started?)

For grins, I created a thread that does nothing but wait.  It waits on the ftp list command to finish, then it finishes.  I then start the thread, then wait on it.  This does not solve the problem, however, as there is still no event loop for the QFtp, so it does nothing.  Clearly, I don't understand how event loops work with QWizardPage and QFtp.

The goal: When a user lands on the given qwizard page, several small text files are downloaded from ftp & the contents of those files are used to drive the rest of the wizard.  I would like for the files to be downloaded as part of initializePage & the UI built around the results.  Is this possible?
Currently, I see the ftp commands being queued up, but none ever run... *unless* there's a problem on the page & I get an exception/traceback (which I suspect does something to the event loop), in which case ftp works as I expect it would - directory listed, filenames printed, etc.  No exception/traceback: no ftp commands completed.  Exception/traceback: all ftp commands complete.

To be concise:  How do you get a QFtp to run commands in a QWizardPage w/o a button click?


More information about the PyQt mailing list