2016-11-10 79 views
2

我在YouTube上觀看了關於PyQt4信號的簡短教程,並且無法運行小型示例程序。我如何將從線程發出的信號連接到主窗口?PyQt5信號和線程

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_()) 

回答

4

信號必須被創建,你ThreadClass內,或之前但是當你發出ThreadClass內的信號,不如去創造你的類中。

創建後,您需要將其連接到進度條功能。以下是您班級內部創建和連接的信號示例。

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) 

請記住,因爲這PyQt5信號已經改變風格:Description

,如果你看了PyQt4的教程,這是不一樣的。

+0

工作!謝謝您的幫助!! – WhiskyRyan