Stack Overflow en español Asked on November 13, 2021
Contexto:
Tengo dos archivos Uno.py
y Dos.py
entre los cuales trato de realizar una importación cíclica, en uno de ellos tengo una QMainWindow
y en el otro un QDialog
, al oprimir un botón la ventana actual debe cerrarse y abrir la ventana del otro archivo.
Problema:
El problema es que al presionar el botón no se cierra la ventana y sale el siguiente mensaje:
QCoreApplication::exec: The event loop is already running
Anexo un ejemplo:
La intención es que al presionar un botón se abra la otra ventana y se cierre la actual y viceversa
Uno.py
from PyQt5.QtWidgets import QMainWindow,QApplication,QPushButton
class Class_Uno(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.Boton = QPushButton(self)
self.Boton.setText("Presioname")
self.Boton.clicked.connect(self.Conexion)
def Conexion(self):
from Dos import Class_Dos
self.dos = Class_Dos()
self.dos.show()
self.close()
app = QApplication([])
cu = Class_Uno()
cu.show()
app.exec_()
Dos.py
from PyQt5.QtWidgets import QDialog,QApplication,QPushButton
class Class_Dos(QDialog):
def __init__(self):
QDialog.__init__(self)
self.BotonDos = QPushButton(self)
self.BotonDos.setText("Presioname 2")
self.BotonDos.clicked.connect(self.Conectar)
self.resize(300,200)
def Conectar(self):
from Uno import Class_Uno
self.uno = Class_Uno()
self.uno.show()
self.close()
El problema no es la importación cíclica sino que cada vez que importas Uno estas ejecutando:
app = QApplication([])
cu = Class_Uno()
cu.show()
app.exec_()
Donde estas creando un nuevo QApplicatión, pero Qt lo prohibe. Asi que uno posible solución es usar if __name__ == '__main__':
para que solo sea ejecutado una sola vez(para más información lee esta respuesta).
from PyQt5.QtWidgets import QMainWindow,QApplication,QPushButton
class Class_Uno(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.Boton = QPushButton(self)
self.Boton.setText("Presioname")
self.Boton.clicked.connect(self.Conexion)
def Conexion(self):
from Dos import Class_Dos
self.dos = Class_Dos()
self.dos.show()
self.close()
if __name__ == '__main__':
app = QApplication([])
cu = Class_Uno()
cu.show()
app.exec_()
Answered by user22539 on November 13, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP