我有2个不同的窗口,我的主窗口是在第一个文件中创建的,而QDialog窗口是代码位于第二个文件中的...我要做的是能够从file2中关闭创建的主窗口在file1中,还要关闭file2中的QDialog并在file3中创建一个新窗口。该应用程序不能退出。
使用file3中的代码创建一个新窗口很容易,我并不担心...问题是在file2中,我无法告知主窗口关闭。
这是2个文件中的代码,更清楚了...
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_()
所以...我想做的是,在confirmer
中的功能creation_partie.py
中,可以从menu
关闭main.py
。 menu
是QMainWindow
,而fenetre_creer_une_partie
是我的QDialog
。
现在,代码编译并运行良好,直到我单击应该关闭menu. PyCharm is not raising compiling error for
main.menu.close()`的按钮,但是当代码即将执行时(此时,我单击我的按钮),出现以下错误:
module 'main' has no attribute 'menu'
我该如何解决?
P.S .:很抱歉,法语变量和类名是加拿大法语:)。
谢谢!
编辑: 由于问题已结案,因此将解决方案放在这里: 基本上,我在关闭主窗口的类之外的˙main.py˙中创建了一个函数。之后,我唯一需要做的就是通过使用˙main.my-closing-function˙在˙creer_partie.py˙中调用该函数。