从QDialog关闭主窗口

时间:2020-06-05 01:38:50

标签: python pyqt5

我有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.pymenuQMainWindow,而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˙中调用该函数。

0 个答案:

没有答案