Widgets de PyQt 5: Ventanas y cuadros de diálogo

Hektor Profe
3 min readSep 7, 2018

--

Hola a todos, después de mi artículo “Primeros pasos en PyQt 5 y Qt Designer”, empiezo una pequeña serie donde repasaré los widgets más esenciales de esta librería gráfica.

Widgets en la programación visual

Según la wikipedia, en el contexto de la programación de aplicaciones visuales, los widgets se pueden entender como componentes o controles que el programador reutiliza para construir interfaces gráficas de usuario (GUI). Algunos de los más comunes serían las ventanas, las etiquetas, los cuadros de texto, los botones, etc.

Ventanas y cuadros de diálogo

En PyQt, un widget que no está incrustado en un widget principal se llama ventana. Por lo general, las ventanas tienen un marco y una barra de título, aunque también es posible crear ventanas sin dicha decoración.

En Qt, QMainWindow (ventana principal) y las diversas subclases de QDialog (cuadros de diálogo) son los tipos de ventana más comunes, aunque también está la propia superclase QWidget (clase base de todos los widgets), cuyas instancias sin un padre asignado se convertirán también en ventanas.

Diseño en Qt Designer de tres tipos de ventana (QMainWindow, QWidget y QDialog)

La ventana principal QMainWindow

La ventana principal de la aplicación proporciona el marco para construir la interfaz de usuario principal y se crea heredando de QMainWindow. QMainWindow tiene su propio diseño al que puede agregar una barra de menú, barras de herramientas, widgets acoplables y una barra de estado. El área central puede estar ocupada por cualquier clase de QWidget.

Ventana de 400x200 creada a partir de QMainWindow (código de abajo)
from PyQt5.QtWidgets import QApplication, QMainWindow

class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setWindowTitle("Hola mundo")
self.setFixedSize(400, 200)

if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()

Cuadros de diálogo QDialog

Los cuadros de diálogo se usan como ventanas secundarias que presentan al usuario opciones y elecciones. Se crean heredando de QDialog y utilizan widgets y diseños para implementar la interfaz de usuario. Qt proporciona una serie de diálogos estándar listos para usar que se pueden usar para tareas estándar como selección de archivos o fuentes.

Ventana de 200x100 creada igual que la anterior pero a partir de la clase QDialog
from PyQt5.QtWidgets import QApplication, QDialogclass Dialog(QDialog):
def __init__(self, *args, **kwargs):
super(Dialog, self).__init__(*args, **kwargs)
self.setWindowTitle("Hola mundo")
self.setFixedSize(400, 200)
if __name__ == "__main__":
app = QApplication([])
dialog = Dialog()
dialog.show()
app.exec_()
Llamada del QDialog al presionar un botón desde la QMainWindow
from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog, QPushButtonclass MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setWindowTitle("Hola mundo")
self.setFixedSize(400, 200)
self.button = QPushButton(self, text="Mostrar diálogo")
self.button.clicked.connect(self.show_dialog)
def show_dialog(self):
dialog = Dialog(self) # self hace referencia al padre
dialog.show()
class Dialog(QDialog):
def __init__(self, *args, **kwargs):
super(Dialog, self).__init__(*args, **kwargs)
self.setWindowTitle("Soy un popup")
self.setFixedSize(200, 100)
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
QDialog genérico creado con el widget QMessageBox
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox, QPushButtonclass MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setWindowTitle("Hola mundo")
self.setFixedSize(400, 200)
self.button = QPushButton(self, text="Mostrar diálogo")
self.button.clicked.connect(self.show_dialog)
def show_dialog(self):
QMessageBox.about(self, "Hola", "Soy un popup genérico")
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()

Evidentemente tanto las ventanas principales como los diálogos se pueden crear con Qt Designer, además es una excelente forma de aprender Qt.

Con esto acabamos, próximamente repasaremos más widgets.

https://www.hektorprofe.net/

--

--

Hektor Profe

Eterno aprendiz, enseñar es aprender dos veces y eso es lo que hago. ¡Únete a mi academia en mi web! https://www.hektorprofe.net/