ryn*_*n1x 5 python qt pyqt python-3.x pyqt5
我在youtube上观看了关于PyQt4信号的简短教程,并且无法运行一个小样本程序.如何将从线程发出的信号连接到主窗口?
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_())
Run Code Online (Sandbox Code Playgroud)
必须在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)
Run Code Online (Sandbox Code Playgroud)
请记住,自PyQt5:描述以来,信号已经改变了样式
如果您看过PyQt4的教程,那就不一样了.