2016-11-10 6 views
2

Ich habe ein kurzes Tutorial über PyQt4-Signale auf youtube gesehen und habe Probleme, ein kleines Beispielprogramm laufen zu lassen. Wie verbinde ich mein von einem Thread ausgesendetes Signal mit dem Hauptfenster?PyQt5 Signale und Threading

import cpuUsageGui 
import sys 
import sysInfo 
from PyQt5 import QtCore 

"""Main window setup""" 
app = cpuUsageGui.QtWidgets.QApplication(sys.argv) 
Form = cpuUsageGui.QtWidgets.QWidget() 
ui = cpuUsageGui.Ui_Form() 
ui.setupUi(Form) 

def updateProgBar(val): 
    ui.progressBar.setValue(val) 

class ThreadClass(QtCore.QThread): 
    def run(self): 
     while True: 
      val = sysInfo.getCpu() 
      self.emit(QtCore.pyqtSignal('CPUVALUE'), val) 

threadclass = ThreadClass() 

# This section does not work 
connect(threadclass, QtCore.pyqtSignal('CPUVALUE'), updateProgBar) 
# This section does not work 

if __name__ == "__main__": 
    threadclass.start() 
    Form.show() 
    sys.exit(app.exec_()) 

Antwort

4

Das Signal muss in Ihrem ThreadClass erstellt werden, oder vor, aber wie Sie das Signal innerhalb der ThreadClass emittieren, ist es besser, es in Ihrer Klasse zu erstellen.

Nach dem Erstellen müssen Sie es mit der Fortschrittsbalkenfunktion verbinden. Hier ist ein Beispiel für das Signal, das in Ihrer Klasse erzeugt und verbunden wird.

class ThreadClass(QtCore.QThread): 
    # Create the signal 
    sig = QtCore.pyqtSignal(int) 

    def __init__(self, parent=None): 
     super(ThreadClass, self).__init__(parent) 

     # Connect signal to the desired function 
     self.sig.connect(updateProgBar) 

    def run(self): 
     while True: 
      val = sysInfo.getCpu() 

      # Emit the signal 
      self.sig.emit(val) 

Beachten Sie, dass Signale verändert haben Stil seit PyQt5: Description

, wenn Sie ein Tutorial für PyQt4 beobachtet, ist es nicht das gleiche sein.

+0

Das hat funktioniert! Danke für die Hilfe!! – WhiskyRyan