2016-11-10 9 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

関連する問題