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