🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
2 messages
2 total messages Started by OMS Diver Tue, 31 May 2011 15:02
Przekazywanie obiektu przez emit()
#28140
Author: OMS Diver
Date: Tue, 31 May 2011 15:02
73 lines
3700 bytes
Może coś pieprzę na potęgę, ale googlając to i ówdzie znalazłem informacje o przekazywaniu obiektu w wyniku wywolania 
metody emit(). Problem w tym, że wykonując kod żadne błedy nie są zwracane, a nie działa. Ale po kolei

Najpierw definicja klas bazowych

----------
class signalMessage():
     def __init__(self):
         pass

----------
class qThread(QtCore.QThread):
     sigProgress = QtCore.pyqtSignal(dict)
     sigTable = QtCore.pyqtSignal(dict)
     def __init__(self):
         QtCore.QThread.__init__(self)
         # Setup progress attributes #
         self.cTimer = QtCore.QTimer()
         # Setup slots and signals #
         QtCore.QObject.connect(self.cTimer, QtCore.SIGNAL("timeout()"), self.sigProgressEmit)
         # Setup signal message object #
         self.mesProgress = signalMessage()
         setattr(self.mesProgress, "timeStart", datetime.datetime.now())
         setattr(self.mesProgress, "timeNow", datetime.datetime.now())
         setattr(self.mesProgress, "progressStart", 0)
         setattr(self.mesProgress, "progressValue", 0)
         setattr(self.mesProgress, "progressEnd", 0)
     def sigProgressEmit(self):
         self.mesProgress.timeNow = datetime.datetime.now()
         self.sigProgress.emit(self.mesProgress)
         time.sleep(0.005)
     def sigTableEmit(self):
         self.sigTable.emit(self.mesTable)
         time.sleep(0.005)

potem definicja klasy dziedziczącej

----------
class qThread_Child(qThread):
     def __init__(self):
         qThread.__init__(self)
     def run(self):
         self.cTimer.start(100)
         >>> Tutaj coś się dzieje przez jakiś czas <<<
         self.cTimer.stop()

potem definicja okna

----------
formclass, baseclass = uic.loadUiType("gui/dlgProcess.ui")
class DialogProcess(baseclass, formclass):
     def __init__(self, dbConnection):
         baseclass.__init__(self)
         self.setupUi(self)
         # Setup QThread #
         self.qThread = qThread()
         # Setup GUI #
         >>> jakieś parametry elementów okna <<<
         # Setup Signals and Slots #
         QtCore.QObject.connect(self.btnExecute, QtCore.SIGNAL("clicked()"), self.execute)
         self.qThread.sigProgress.connect(self.progressUpdate)
     def execute(self):
         self.qThread.start()
     def progressUpdate(self, mesProgress):
         self.lblTimer.setText(mesProgress.timerNow)
         self.barProgress.setMinimum(mesProgress.progressStart)
         self.barProgress.setValue(mesProgress.progressValue)
         self.barProgress.setMaximum(mesProgress.progressEnd)

No i problem taki, że w metodzie progressUpdate klasy DialogProcess nie dzieje się nic. Tak jakby nie była wywoływana 
przez połączenie

self.qThread.sigProgress.connect(self.progressUpdate)
Re: Przekazywanie obiektu przez emit()
#28141
Author: OMS Diver
Date: Tue, 31 May 2011 15:04
6 lines
1083 bytes
Oczywiście zamiast
sigProgress = QtCore.pyqtSignal(dict)
sigTable = QtCore.pyqtSignal(dict)
jest
sigProgress = QtCore.pyqtSignal(object)
sigTable = QtCore.pyqtSignal(object)
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads