PyQt4到PyQt5怎么转换?

7

我的代码是使用PyQt4创建的,我想把它转换为PyQt5。

我尝试了一些脚本来转换代码,但是除了名称以外什么也没有改变。

我需要手动更改哪些内容才能使代码在PyQt5中正常运行?

这里是我的代码的第一部分:

import sys
from pymaxwell import *
from numpy import *
from PyQt4 import QtGui, QtCore, uic
from PyQt4.QtGui import QMainWindow, QApplication
from PyQt4.QtCore import *
from PyQt4.phonon import Phonon
from ffmpy import FFmpeg
import os
import app_window_dark
import about

uifile = 'Ui/app_window_dark.ui'
aboutfile = 'Ui/about.ui'

Ui_MainWindow, QtBaseClass = uic.loadUiType(uifile)
Ui_Dialog= uic.loadUiType(uifile)

class About(QtGui.QMainWindow, about.Ui_Dialog):
    def __init__(self, parent=None):
        super(About, self).__init__()
        QtGui.QMainWindow.__init__(self, parent)
        Ui_Dialog.__init__(self)
        self.setWindowModality(QtCore.Qt.ApplicationModal)
        point = parent.rect().bottomRight()
        global_point = parent.mapToGlobal(point)
        self.move(global_point - QPoint(395, 265))
        self.setupUi(self)

class MyApp(QtGui.QMainWindow, app_window_dark.Ui_MainWindow):
    def __init__(self):
        super(MyApp, self).__init__()
        QtGui.QMainWindow.__init__(self)
        self.ui = Ui_MainWindow.__init__(self)
        self.setupUi(self)
        self.about_btn.clicked.connect(self.popup)

        #prev next
        self.btn_next.clicked.connect(self.renderSet)
        self.btn_prev.clicked.connect(self.renderSet)

而且这段代码:
if __name__ == "__main__":
    app = QApplication(sys.argv)
    #style = QApplication.setStyle('plastique')
    window = MyApp()
    window.setFixedSize(750, 320)
    window.show()
    sys.exit(app.exec_())

请尝试我的答案,我还回答了你的另一个问题,但你没有告诉我是否对你有帮助。 - eyllanesc
谢谢;我告诉过你,当问题解决后,我会先尝试它,然后专注于其他工作。 - seghier
1个回答

10

从Qt4到Qt5,以及从PyQt4到PyQt5的主要变化是某些类的重新排列,以使Qt项目具有可伸缩性并生成较小的可执行文件。

QtGui库被分为两个子模块:QtGui和QtWidgets,在后者中只有部件,即QMainWindow、QPushButton等。这就是您需要进行的更改:

[...]
from PyQt5 import QtGui, QtCore, uic, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtCore import *
[...]

Ui_MainWindow, QtBaseClass = uic.loadUiType(uifile)
Ui_Dialog= uic.loadUiType(uifile)

class About(QtWidgets.QMainWindow, about.Ui_Dialog):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setupUi(self)
        self.setWindowModality(QtCore.Qt.ApplicationModal)
        point = parent.rect().bottomRight()
        global_point = parent.mapToGlobal(point)
        self.move(global_point - QPoint(395, 265))

class MyApp(QtWidgets.QMainWindow, app_window_dark.Ui_MainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.setupUi(self)
        self.about_btn.clicked.connect(self.popup)

        #prev next
        self.btn_next.clicked.connect(self.renderSet)
        self.btn_prev.clicked.connect(self.renderSet)

注意: 在PyQt5中不存在Phonon,您必须使用QtMultimedia,您可以在以下答案中找到一个准确的解决方案: PyQt5中不存在Phonon类


非常感谢;工作正常,但必须导入QtWidgets:from PyQt5 import QtGui、QtWidgets、QtCore、uic。 - seghier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接