Pyside6: Crea el QTabWidget con una función en lugar de una clase.
He estado intentando hacer una aplicación utilizando Pyside6 y no logro entender por qué no puedo crear un QDialog con QTabWidget utilizando solo funciones.
No estoy seguro si estoy cometiendo algún error, así que aquí está el código que he escrito:
Importaciones:
from PySide6.QtWidgets import (QMessageBox, QApplication, QWidget, QGridLayout, QLabel, QMainWindow, QTabWidget,
QVBoxLayout)
from sys import argv
Función para dos pestañas:
def WelPage():
grid = QGridLayout()
wel_tab = QWidget()
wel_tab.setLayout(grid)
lab_name = QLabel("Este es un label")
git_link = QLabel("Este es un enlace")
git_link.setOpenExternalLinks(True)
yt_link = QLabel("Otro enlace")
yt_link.setOpenExternalLinks(True)
grid.addWidget(lab_name, 0, 1)
grid.addWidget(git_link, 1, 0)
grid.addWidget(yt_link, 1, 3)
def AboutPage():
about_tab = QWidget()
lo = QVBoxLayout()
purpose = QLabel("Una etiqueta muy larga")
lo.addWidget(purpose)
about_tab.setLayout(lo)
Función principal:
def main():
w = QWidget()
layout = QVBoxLayout()
tw = QTabWidget()
w.resize(450, 250)
w.setWindowTitle('Título de la ventana')
layout.addWidget(tw)
tw.addTab(WelPage(), "Pantalla de bienvenida")
tw.addTab(AboutPage(), "Acerca de")
tw.show()
w.setLayout(layout)
w.show()
app.exec()
if __name__ == "__main__":
app = QApplication(argv)
main()
El resultado es una ventana en blanco. No estoy seguro de por qué. ¿Por qué tengo que usar una clase en lugar de este método?
davy.ai
La razón por la que no se puede crear un
QDialog
con unQTabWidget
utilizando solo funciones es porqueQDialog
es un widget complejo que requiere mucha inicialización y configuración, y es necesario gestionar adecuadamente su ciclo de vida y su bucle de eventos.Cuando se crea una instancia de
QDialog
, se necesita mostrarla utilizando el métodoexec()
, el cual crea un bucle de eventos anidado que espera a que el usuario interactúe con el diálogo y luego devuelve un resultado.Por otro lado, el
QTabWidget
es un widget más simple que se puede agregar a cualquier widget contenedor, como unQMainWindow
, y no requiere ningún manejo especial del bucle de eventos.En su código de ejemplo, está creando el
QTabWidget
como un hijo de unQWidget
, lo cual está bien, pero no está creando ninguna instancia deQDialog
para contenerlo. Por lo tanto, solo está creando una ventana en blanco con unQTabWidget
adentro, pero no se está mostrando como un diálogo.Para solucionar esto, es necesario crear una instancia de
QDialog
, establecer sus atributos (como su título y tamaño), agregar elQTabWidget
a él y luego mostrarlo utilizandoexec()
.Aquí hay un código de ejemplo que demuestra cómo crear un
QDialog
con unQTabWidget
:Este código define dos funciones que crean el contenido de las dos pestañas (
create_welcome_tab()
ycreate_about_tab()
), una función que crea el diálogo y agrega elQTabWidget
a él (create_dialog()
), y luego inicia el ciclo de eventos de la aplicación llamando aapp.exec()
.Cuando ejecute este código, se mostrará una instancia de
QDialog
con unQTabWidget
que contiene dos pestañas (“Pantalla de bienvenida” y “Acerca de”).