PyQt4: отправка пользовательского сигнала из потока в диалоговое окно прогресса

Я не могу отправить сигнал, обновляющий диалоговое окно прогресса из QThread. Я настроил это так (из класса MainWindow):

self.progressDialog = QtGui.QProgressDialog("Packing ...", QtCore.QString(), 0,100, self.parent_)
self.thread = QtCore.QThread(parent = self.parent_)
self.thread.run = myRun
self.thread.start()
self.thread.QtCore.connect(self.thread, QtCore.SIGNAL("updateProgress"), self.progressDialog, QtCore.SLOT("setProgress(int progress, int totalSteps)"))

затем из функции myRun я пытаюсь передать сигнал:

self.thread.emit(QtCore.SIGNAL("updateProgress"),progress,total)

Но диалог прогресса просто не обновляется :(.

Что я делаю неправильно?

Спасибо! Натан


person Nathan    schedule 13.07.2010    source источник


Ответы (1)


Я бы сделал что-то так:

self.connect(self.thread, QtCore.SIGNAL("progressUpdated"), self.updateProgress)

а затем метод (слот) в главном окне:

  def updateProgress(self, progress):
    self.ui.progressBar.setValue(progress) 
    self.ui.progressBar.repaint()

self или self.ui зависит от того, создали ли вы подкласс mainWindow, а затем запустили setupUi

self.thread.emit(QtCore.SIGNAL("updateProgress"),progress)

мне кажется правильным

person apelliciari    schedule 21.03.2011