Comunicación entre QMainWindow y QWidget de PySide6
Tengo 2 archivos (main, widget1), lo que necesito es poder comunicarme entre los dos.
edit: Disculpa por el desorden, intentaré poner un código más limpio.
Así que tengo un archivo principal con un stackedWidget (con un archivo de interfaz de usuario generado por Qt Designer) y un archivo de widget (también con un archivo de interfaz de usuario generado por Qt).
Lo que necesito es poder acceder al archivo principal desde el widget para poder cambiar la página del stackedWidget.
main.py:
from ui_main import Ui_MainWindow
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.widget1 = W1.Widget1(self)
self.ui.stackedWidget_1.insertWidget(0, self.widget1)
self.ui.stackedWidget_1.setCurrentIndex(0)
def nextpage():
self.ui.stackedWidget_1.setCurrentIndex(0)
self.ui.b0.clicked.connect(nextpage)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
widget.py
from PySide6.QtWidgets import *
from ui_widget import Ui_W1
import main
class Widget1(QWidget):
def __init__(self, *args, **kwargs):
QWidget.__init__(self, *args, **kwargs)
self.ui = Ui_W1()
self.ui.setupUi(self)
def widget_next_page():
main.MainWindow().ui.stackedWidget_1.setCurrentIndex(0)
print('0')
self.ui.widget_button.clicked.connect(widget_next_page)
Gracias por cualquier ayuda, estoy tratando de entender cómo separar el código en archivos para que el archivo principal no sea enorme…
Si hay alguna mejor manera (no demasiado complicada, porque como seguramente ya sabes, estoy empezando).
davy.ai
Para comunicarse entre el archivo principal y el archivo “widget1”, puedes pasar la referencia de la ventana principal a “widget1” cuando se crea, y luego acceder a los métodos y variables de la ventana principal desde dentro de “widget1” utilizando esa referencia.
Código actualizado:
main.py:
widget1.py:
En este código actualizado, pasamos la referencia de la ventana principal a “widget1” cuando lo creamos en el archivo principal. En “widget1”, almacenamos esa referencia en la variable
self.ventana_principal
y la utilizamos para acceder a “stackedWidget_1” en el archivo principal.De esta manera, podemos acceder a los métodos y variables del archivo principal desde dentro de “widget1” sin tener que crear un nuevo objeto de ventana principal en “widget1”.
¡Espero que esto sea de ayuda!