Uno de los paquetes más avanzados para el desarrollo de Gui en Python es PyQt5. Según Christian Tismer, el mantenedor de Pyside2, PyQt5 tiene unas 25.000 funciones para que las uses. Esa es una biblioteca realmente grande. Sin embargo, si desea distribuir su aplicación comercialmente, debe comprar una licencia de la empresa Qt. Afortunadamente, PySide2 le permite la misma libertad que Free/Libre Software. Veamos cómo podemos migrar una aplicación PyQt5 típica a PySide2.
Python3
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_())
Salida: hemos hecho uso deliberado de un ejemplo que usa QtWidget , QtCore y QtGui . Una cosa que hacer es tomar buenas prácticas. se trata de evitar la importación de X *. El espacio de nombres de nuestras importaciones tiene la ventaja de saber qué se incluye en qué módulo.
Python3
import sys from PyQt5 import QtWidgets from PyQt5 import QtCore from PyQt5 import QtGui
Ahora, cambie nuestro código al siguiente donde asignamos un espacio de nombres a nuestras importaciones. QMainWindow se convierte en QtWidgets.QMainWindow y así sucesivamente –
Python3
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_())
Convertir a Pyside2 Convertir nuestra aplicación a PySide2 es tan simple como cambiar nuestras importaciones a
Python3
import sys from PySide2 import QtWidgets from PySide2 import QtCore from PySide2 import QtGui
Advertencias a tener en cuenta:
Para la mayoría de los usos, migrar significa ajustar las importaciones, definir funciones y usar solo las funciones admitidas.
- Una cosa a tener en cuenta es app.exec_ . exec_ se usó porque exec es una palabra clave de Python2. Bajo Python3, PyQt5 permite el uso de exec pero no de PySide2. PyQt5 admite tanto sys.exit(app.exec_()) como sys.exit(app.exec()), pero PySide2 solo admite app.exec_().
- La segunda cosa es la señal y las ranuras. Bajo PyQt5 es QtCore.pyqtSignal y QtCore.pyqtSlot y bajo PySide2 es QtCore.Signal y QtCore.Slot.
- Lo tercero es cargar archivos Ui.
Publicación traducida automáticamente
Artículo escrito por abdurrahmaanjanhangeer y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA