关于python:PyQt4槽系统转换到PyQt5

PyQt4 slot system transition to PyQt5

我在网上学习了一些关于Pyqt线程的教程,但是这个示例使用了Pyqt4,而我使用的是Pyqt5。我阅读此链接以获取一些信息:http://pyqt.sourceforge.net/docs/pyqt5/signals_slots.html。

但是我仍然不明白我应该如何更改下面的示例,使其与Pyqt5一起工作。

这个例子应该做的是显示进度条上的CPU百分比,我使用线程的原因是当CPU负载改变时,进度条的值会改变。

所以,仅供参考,下面的代码是与Pyqt4一起使用的代码,但不与版本5一起使用,如果有人能向我展示正确的使用Pyqt5的方法,这将是很有帮助的。

我的示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import sys
import os
import sysInfo
from PyQt5.QtCore import *
from PyQt5.QtWidgets import QWidget, QApplication

from test import Ui_Form

class MainUiClass(QWidget, Ui_Form):
    def __init__(self, parent=None):
        super(MainUiClass, self).__init__(parent)
        self.setupUi(self)
        self.threadclass = ThreadClass()
        self.threadclass.start()
        self.connect(self.threadclass, SIGNAL('CPU_VALUE'), self.updateProgressBar)

    def updateProgressBar(self, val):
        self.progressBar.setValue(val)

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

    def run(self):
        while 1:
            val = sysInfo.getCPU()  # get cpu load
            self.emit(SIGNAL('CPU_VALUE'), val)

if __name__ == '__main__':
    app = QApplication([])
    window = MainUiClass()
    window.show()
    sys.exit(app.exec_())


声明信号的方法从pyqt4更改为pyqt5:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class MainUiClass(QWidget, Ui_Form):
    def __init__(self, parent=None):
        super(MainUiClass, self).__init__(parent)
        self.setupUi(self)
        self.threadclass = ThreadClass()
        self.threadclass.cpuValueChanged.connect(self.updateProgressBar)
        self.threadclass.start()


    def updateProgressBar(self, val):
        self.progressBar.setValue(val)

class ThreadClass(QThread):
    cpuValueChanged = pyqtSignal(int)
    def __init__(self, parent=None):
        super(ThreadClass, self).__init__(parent)

    def run(self):
        while 1:
            val = sysInfo.getCPU()  # get cpu load
            self.cpuValueChanged.emit(val)

if __name__ == '__main__':
    app = QApplication([])
    window = MainUiClass()
    window.show()
    sys.exit(app.exec_())