On 05/08/11 17:46, Eric Frederich wrote:
Any takers?

On Thu, Jul 7, 2011 at 12:38 PM, Eric Frederich
<eric.freder...@gmail.com>  wrote:
Hello,

I am trying to create a login dialog for my application.
Logging in can take a couple of seconds so I wanted to show a progress
bar during the login process.
I think that for my QProgressBar to animate during this time, I need
to log in on a different thread.  Is this true?

So, below I have what I think is a working example.
Is there a better way to call QDialog's accept slot when the login
thread is finished than how I am doing it via functools.partial?
It seems a bit hacky.




from functools import partial

class LoginThread(QThread):
    def __init__(self, username, password, parent=None):
        super(LoginThread, self).__init__(parent)
        self.username = username
        self.password = password
    def run(self):
        LOGIN(
            self.username,
            self.password,
        )

class LoginDialog(QDialog, Ui_LoginDialog):

    def __init__(self, *args, **kwargs):
        super(LoginDialog, self).__init__(*args, **kwargs)
        self.setupUi(self)
        self.progressbar.hide()

    def accept(self):
        self.progressbar.setMinimum(0)
        self.progressbar.setMaximum(0)
        self.progressbar.show()
        self.lt = LoginThread(
            str(self.username_edit.text()),
            str(self.password_edit.text())
        )
        self.connect(self.lt, SIGNAL('finished()'),
partial(QDialog.accept, self))
        self.lt.start()

it's hard to tell from the limited code you've posted why you need to override accept(). why not just create a handler for the clicked() signal of the ok button (or whatever it is) and then connect the thread's finished() signal directly to the dialog's accept() slot?
_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to