从 PyQt5 转换为 PyQt4 [关闭]

Posted

技术标签:

【中文标题】从 PyQt5 转换为 PyQt4 [关闭]【英文标题】:Convert from PyQt5 to PyQt4 [closed] 【发布时间】:2021-07-12 14:42:40 【问题描述】:

兄弟姐妹们,我只是想知道是否有人可以帮我将这个程序转换为 PyQt4。我尽力了,但我做不到;,)。它是一个在 UI 上显示实时文本的基本程序。

这是程序:

import sys
import time
import random
from PyQt5 import QtWidgets, QtCore
 
class WorkerThread(QtCore.QObject):
    signal = QtCore.pyqtSignal(int)
 
    def __init__(self):
        super().__init__()
 
    @QtCore.pyqtSlot()
    def run(self):
        while True:
            number = random.randint(1, 1000)
            self.signal.emit(number)
            time.sleep(1)
 
class WorkerLabel(QtWidgets.QLabel):
    def __init__(self, parent):
        super().__init__()
 
    @QtCore.pyqtSlot(int)
    def slot(self, i):
        self.setText(str(i))
 
class UserInterface(QtWidgets.QWidget):
    def __init__(self, parent):
        super().__init__()
        self.label = WorkerLabel(self)
        self.layout = QtWidgets.QVBoxLayout()
        self.layout.addWidget(self.label)
        self.setLayout(self.layout)
 
class Main(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = UserInterface(self)
        self.setCentralWidget(self.ui)
 
        self.worker = WorkerThread()
        self.workerThread = QtCore.QThread()  # Move the Worker object to the Thread object
        self.workerThread.started.connect(self.worker.run)  # Init worker run() at startup
        self.worker.moveToThread(self.workerThread)
        self.worker.signal.connect(self.ui.label.slot)
        self.workerThread.start()
 
        self.show()
 
if __name__== '__main__':
    app = QtWidgets.QApplication([])
    gui = Main()
    sys.exit(app.exec_())

【问题讨论】:

QtWidgets更改为QtGui 请注意,***不是移植服务。你说“我尽力了”,但老实说,我看不到任何尝试,你只是提供了一个功能齐全的 PyQt5 程序。而且,坦率地说,考虑到将它移植到 PyQt4 需要什么,我认为你根本没有做任何事情。 谢谢兄弟的热心回复,我有这个程序的编辑版本,我现在将它添加。感谢您的评论! 【参考方案1】:

我不是 PyQt 方面的专家,但我用它为汽车、机器人、小型飞机开发遥测技术。多亏了 eyllanesc,它现在已解决并且运行良好。问题是 PyQt4 在 PyQt5 中使用 QtGui 而不是 QtWidgets

这里是示例代码:

import sys
import time
import random
from PyQt4 import QtGui, QtCore
 
class WorkerThread(QtCore.QObject):
    signal = QtCore.pyqtSignal(int)
 
    def __init__(self):
        super().__init__()
 
    @QtCore.pyqtSlot()
    def run(self):
        while True:
            number = random.randint(1, 1000)
            self.signal.emit(number)
            time.sleep(1)
 
class WorkerLabel(QtGui.QLabel):
    def __init__(self, parent):
        super().__init__()
 
    @QtCore.pyqtSlot(int)
    def slot(self, i):
        self.setText(str(i))
 
class UserInterface(QtGui.QWidget):
    def __init__(self, parent):
        super().__init__()
        self.label = WorkerLabel(self)
        self.layout = QtGui.QVBoxLayout()
        self.layout.addWidget(self.label)
        self.setLayout(self.layout)
 
class Main(QtGui.QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = UserInterface(self)
        self.setCentralWidget(self.ui)
 
        self.worker = WorkerThread()
        self.workerThread = QtCore.QThread()  # Move the Worker object to the Thread object
        self.workerThread.started.connect(self.worker.run)  # Init worker run() at startup
        self.worker.moveToThread(self.workerThread)
        self.worker.signal.connect(self.ui.label.slot)
        self.workerThread.start()
 
        self.show()
 
if __name__== '__main__':
    app = QtGui.QApplication([])
    gui = Main()
    sys.exit(app.exec_())

【讨论】:

以上是关于从 PyQt5 转换为 PyQt4 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从 PyQt4 迁移到 PyQt5 时面临的问题

将 PyQt4 代码适配到 PyQt5,SIGNAL 问题

PyQt4 到 PyQt5 怎么样?

如何将此代码转换为 PyQt5?

如何从 closeEvent 处理使用 PyQt4 检测注销/关闭?

PyQt5从子窗口关闭父窗口和子窗口