【问题标题】:PyQt5 Signals and ThreadingPyQt5 信号和线程
【发布时间】:2017-03-25 00:54:00
【问题描述】:

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

【问题讨论】:

    标签: python qt python-3.x pyqt pyqt5


    【解决方案1】:

    信号必须在您的 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 的教程,那就不一样了。

    【讨论】:

    • 生命的救星!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多