将 PyQt5 应用程序迁移到 PySide2
在Python中用于 Gui 开发的最先进的包之一是 PyQt5。根据 Pyside2 的维护者 Christian Tismer 的说法,PyQt5 有大约 25,000 个函数供您使用。那是一个非常大的图书馆。但是,如果您想在商业上分发您的应用程序,则需要从 Qt 公司购买许可证。幸运的是,PySide2 为您提供与 Free/Libre Software 相同的自由。
让我们看看如何将典型的 PyQt5 应用程序迁移到 PySide2。
import sys
from PyQt5.QtWidgets import (QGridLayout)
from PyQt5.QtWidgets import (QMainWindow)
from PyQt5.QtWidgets import (QApplication)
from PyQt5.QtWidgets import (
QWidget,
QPushButton,
QLabel,
QLineEdit
)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import (QPixmap,QIcon)
class Window(QMainWindow):
def __init__(self, parent = None):
super().__init__(parent)
self.setWindowTitle('PyQt5 Demo App')
self.initGui()
def initGui(self):
self.layout = QGridLayout()
self.window = QWidget()
self.window.setLayout(self.layout)
self.setCentralWidget(self.window)
self.num1_label = QLabel('Enter first number:')
self.num1_label.setAlignment(Qt.AlignCenter)
self.text_box1 = QLineEdit()
self.num2_label = QLabel('Enter second number:')
self.text_box2 = QLineEdit()
self.get_answer = QPushButton()
calculate_icon = QPixmap('path_to_image.png')
self.get_answer.setIcon(QIcon(calculate_icon))
self.answer_label = QLabel('---')
self.layout.addWidget(self.num1_label, 0, 0)
self.layout.addWidget(self.text_box1, 1, 0)
self.layout.addWidget(self.num2_label, 2, 0)
self.layout.addWidget(self.text_box2, 3, 0)
self.layout.addWidget(self.get_answer, 4, 0)
self.layout.addWidget(self.answer_label, 5, 0)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = Window()
win.show()
sys.exit(app.exec_())
输出:
我们特意使用了一个使用QtWidget 、 QtCore和QtGui的示例。要做的一件事是采取良好的做法。关于避免from X import *
。命名空间我们的导入具有了解什么属于什么模块的优势。
import sys
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from PyQt5 import QtGui
现在,将我们的代码更改为以下我们命名导入的地方。 QMainWindow变成QtWidgets.QMainWindow等等——
class Window(QtWidgets.QMainWindow):
def __init__(self, parent = None):
super().__init__(parent)
self.setWindowTitle('PyQt5 Demo App')
self.initGui()
def initGui(self):
self.layout = QtWidgets.QGridLayout()
self.window = QtWidgets.QWidget()
self.window.setLayout(self.layout)
self.setCentralWidget(self.window)
self.num1_label = QtWidgets.QLabel('Enter first number:')
self.num1_label.setAlignment(QtCore.Qt.AlignCenter)
self.text_box1 = QtWidgets.QLineEdit()
self.num2_label = QtWidgets.QLabel('Enter second number:')
self.text_box2 = QtWidgets.QLineEdit()
self.get_answer = QtWidgets.QPushButton()
calculate_icon = QtGui.QPixmap('path_to_image.png')
self.get_answer.setIcon(QtGui.QIcon(calculate_icon))
self.answer_label = QtWidgets.QLabel('---')
self.layout.addWidget(self.num1_label, 0, 0)
self.layout.addWidget(self.text_box1, 1, 0)
self.layout.addWidget(self.num2_label, 2, 0)
self.layout.addWidget(self.text_box2, 3, 0)
self.layout.addWidget(self.get_answer, 4, 0)
self.layout.addWidget(self.answer_label, 5, 0)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
win = Window()
win.show()
sys.exit(app.exec_())
转换为 Pyside2
将我们的应用程序转换为 PySide2 就像将我们的导入更改为
import sys
from PySide2 import QtWidgets
from PySide2 import QtCore
from PySide2 import QtGui
需要注意的注意事项——
对于大多数用途,迁移意味着调整导入、定义函数和仅使用支持的函数。
- 需要注意的一件事是app.exec_ 。 exec_被用作exec是 Python2 关键字。在 Python3 下,PyQt5 允许使用exec但不允许使用 PySide2。 PyQt5 支持
sys.exit(app.exec_())
和sys.exit(app.exec())
但 PySide2 仅支持 app.exec_app.exec_()
。 - 第二件事是信号和插槽。在 PyQt5 下是
QtCore.pyqtSignal
和QtCore.pyqtSlot
,在 PySide2 下是QtCore.Signal
和QtCore.Slot
。 - 第三件事是加载 Ui 文件。
在评论中写代码?请使用 ide.geeksforgeeks.org,生成链接并在此处分享链接。