I have 2 different windows, my main window created in my first file and a QDialog window where the code is located in a second file... What I want to do is to be able from file2 to close the main window created in file1, close also the QDialog from file2 and create a new window in file3. The application must NOT quit.
Creating a new window with the code in file3 would be easy, I am not worried about that... The problem is that in file2, I'm unable to tell the main window to close.
Here is the code from the 2 files to be more clear...
main.py:
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import QRegion, QPalette, QPixmap, QBrush
import creation_partie
# import sys
class Menu(QMainWindow):
def __init__(self):
super(Menu, self).__init__()
# *SOME OTHER CODE NOT NEEDED FOR THIS QUESTION*
self.init_ui()
self.setWindowTitle("Bienvenue dans Skip-Bo!")
# *SOME OTHER CODE NOT NEEDED FOR THIS QUESTION*
def center(self):
# *SOME OTHER CODE NOT NEEDED FOR THIS QUESTION*
def quitter(self):
self.close()
def creer_nouvelle_partie(self):
self.fenetre_creer_une_partie = creation_partie.NouvellePartie()
self.fenetre_creer_une_partie.setModal(True)
self.fenetre_creer_une_partie.show()
def next_step(self):
pass
def init_ui(self):
# --------------- Paramètres de la fenêtre --------------------
self.resize(1280, 720)
self.center()
self.background_picture2.load('background_menu2.png')
self.palette.setBrush(self.backgroundRole(), QBrush(self.background_picture2))
self.setPalette(self.palette)
# self.background_picture.setStyleSheet("background-image: url(background_menu.png);")
# self.setCentralWidget(self.background_picture)
# self.background_picture.setScene(self.scene)
# # --------------- Fin des paramètres -------------------------
# *SOME OTHER CODE NOT NEEDED FOR THIS QUESTION*
if __name__ == '__main__':
app = QApplication([])
menu = Menu()
menu.show()
app.exec_()
creation_partie.py:
from PyQt5.QtWidgets import *
# from PyQt5.QtCore import *
# from PyQt5.QtGui import QRegion, QPalette, QPixmap, QBrush
import main
class NouvellePartie(QDialog):
def __init__(self):
super(NouvellePartie, self).__init__()
# *SOME OTHER CODE NOT NEEDED FOR THIS QUESTION*
self.init_ui()
def init_ui(self):
# --------------- Paramètres de la fenêtre --------------------
self.resize(640, 325)
self.center()
# *SOME OTHER CODE NOT NEEDED FOR THIS QUESTION*
def texte_change(self):
# *SOME OTHER CODE NOT NEEDED FOR THIS QUESTION*
def center(self):
# *SOME OTHER CODE NOT NEEDED FOR THIS QUESTION*
def annuler(self):
self.close()
def confirmer(self):
print("Yup")
# send informations to the server backend of the game
self.close()
main.menu.close()
if __name__ == '__main__':
app = QApplication([])
nouvelle_partie = NouvellePartie()
nouvelle_partie.show()
app.exec_()
So... what I want to do, is that in the fonction confirmer
in creation_partie.py
be able to close menu
from main.py
. menu
is a QMainWindow
and fenetre_creer_une_partie
is my QDialog
.
Right now, the code compile and run fine until I click on the button that should close menu. PyCharm is not raising compiling error for
main.menu.close()`, but when the code is about to be executed (at the moment I click my button), I get the following error:
module 'main' has no attribute 'menu'
How can I fix that?
P.S.: Sorry for the french variable and class names, I a french Canadian :) .
Thanks!
EDIT: Since the question has been closed, I will put my solution here: Basically, I created a function in ˙main.py˙ out of the class which close the main window. After that, the only thing I needed was to call that function in ˙creer_partie.py˙ by using ˙main.my-closing-function˙.