python - 从 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_()
所以......我想要做的是,在功能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'
我该如何解决?
PS:对不起法语变量和类名,我是法国加拿大人:)。
谢谢!
编辑: 由于问题已关闭,我将把我的解决方案放在这里:基本上,我在关闭主窗口的类之外的 ˙main.py˙ 中创建了一个函数。之后,我唯一需要做的就是在 ˙creer_partie.py˙ 中使用 ˙main.my-closing-function˙ 调用该函数。
解决方案
推荐阅读
- ios - 我可以在不上传新应用版本的情况下添加新的应用内购买产品吗?
- powerbi - 根据另一个表中的两列求和
- python - 通过 Python 中的函数式编程制作列表
- html - 我可以使此复选框隐藏/显示同一部分中但在不同类下的元素吗?
- java - VS Code 在集成终端而不是 java 的调试控制台中开始调试
- postgresql - 一个 sql 查询不应该返回空?
- neo4j - Neo4J:将数字排名添加到有序输出
- c++ - 使用 StreamReader 检查文件是否存在
- haskell - 如何解决导入 System.Random?
- firebase - 使用 Puppeteer 和 Firebase 函数减少带宽