PyQt4 到 PyQt5 怎么样?

Posted

技术标签:

【中文标题】PyQt4 到 PyQt5 怎么样?【英文标题】:PyQt4 to PyQt5 how? 【发布时间】:2017-10-03 23:09:54 【问题描述】:

我的代码是使用 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_())

【问题讨论】:

试试我的回答,我还回答了你的另一个问题,你没有告诉我是否为你工作。 谢谢;我告诉你什么时候我会先尝试,当问题解决后我专注于其他工作 【参考方案1】:

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

QtGui 库分为 2 个子模块: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 中不存在声子,必须使用 QtMultimedia,准确的解决方案可以在以下答案中找到:Phonon class not present in PyQt5

【讨论】:

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

以上是关于PyQt4 到 PyQt5 怎么样?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

pyqt4 pyqt5 哪个好用

PyQt4->PyQt5 翻译

PyQt5 接收器

PyQt5/pyqt4 是不是已经支持带有手写识别的 QtVirtualKeyboard?