首页 > 解决方案 > 从 QDialog 关闭主窗口

问题描述

我有 2 个不同的窗口,我在第一个文件中创建的主窗口和代码位于第二个文件中的 QDialog 窗口......我想要做的是能够从 file2 关闭在 file1 中创建的主窗口,关闭 file2 中的 QDialog 并在 file3 中创建一个新窗口。应用程序不得退出。

用 file3 中的代码创建一个新窗口很容易,我不担心...问题是在 file2 中,我无法告诉主窗口关闭。

这是2个文件中的代码更清楚......

主要.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_()

创建派对.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_()

所以......我想要做的是,在功能confirmercreation_partie.py能够menumain.py. menu是一个QMainWindowfenetre_creer_une_partie是我的QDialog

现在,代码编译并运行良好,直到我单击应该关闭menu. PyCharm is not raising compiling error formain.menu.close()` 的按钮,但是当代码即将执行时(此时我单击我的按钮),我得到以下错误:

module 'main' has no attribute 'menu'

我该如何解决?

PS:对不起法语变量和类名,我是法国加拿大人:)。

谢谢!

编辑: 由于问题已关闭,我将把我的解决方案放在这里:基本上,我在关闭主窗口的类之外的 ˙main.py˙ 中创建了一个函数。之后,我唯一需要做的就是在 ˙creer_partie.py˙ 中使用 ˙main.my-closing-function˙ 调用该函数。

标签: pythonpyqt5

解决方案


推荐阅读