【发布时间】:2021-01-20 01:41:18
【问题描述】:
在启动时,我的 Qt 应用程序会在显示主窗口之前显示一个带有一些选项的对话框。该对话框有一个“开始”和“取消”按钮。稍后,在显示主窗口后,当用户单击“新游戏”按钮时,会使用相同的对话框。
如果“取消”按钮是唯一显示的界面元素(即在应用程序启动时),我正在尝试让“取消”按钮退出应用程序。然而,在我当前的代码中,主窗口仍然显示。
如果我将self.view.destroy() 替换为self.view.deleteLater(),主窗口会在消失(并正常退出)之前短暂闪烁,但这不是解决方案。
如果我将view.show() 调用移动到dialog.exec_() 块内,它也不起作用。主要是因为每次在主窗口中再次显示对话框时我都会调用view.show(),但也因为即使在这种情况下,应用程序也不会真正退出。在这种情况下,主窗口不会显示,但进程会继续运行(Python 应用程序图标在 Dock 中仍然可见)。
我在这里做错了什么?我已阅读 other similar questions 但我不明白如何在我的案例中应用这些解决方案。
(macOS 10.15.6 上的 PySide2 5.15.1)
class App:
def __init__(self, app, game, view):
self.app = app
self.game = game
self.view = view
# Display the dialog
# Same callback is bound to a QPushButton in MainWindow
self.cb_start_dialog()
def cb_start_dialog(self):
# Do some initialisation
dialog = DialogNewGame() # A subclass of QDialog
if dialog.exec_():
# Setup the interface
else:
if not self.view.isVisible():
# Condition evaluates correctly
# (False on app launch,
# True if main window is displayed)
self.view.destroy()
self.app.quit() # Doesn't work, main window still displayed
def main():
application = QApplication()
view = MainWindow() # A QWidget with the main window
model = Game() # Application logic
App(application, model, view)
view.show()
application.exec_()
【问题讨论】: