PyQt5 QMessageBox对话框从QPushButton关闭主窗口,但不关闭QAction

时间:2018-03-02 12:37:44

标签: python pyqt5 signals-slots qt-designer

也许是一个愚蠢的问题,因为我对PyQt相当新,但......

我从QtDesigner生成了一个主窗口(QMainWindow)对话框,并添加了信号/插槽连接

self.dlg_ui.quit_button.clicked.connect(self.quit)
self.dlg_ui.actionQuit.triggered.connect(self.quit)

注意:quit_button是一个QPushButton对象,actionQuit是一个QAction对象

插槽self.quit打开一个QtWidgets.QMessageBox.question对话框,设置为使用yes / no / cancel响应提供文件保存,但对话框的功能取决于调用它的位置。

如果由actionQuit.triggered调用,则对话框会执行它应该执行的操作但是如果由quit_button.clicked调用,则对话框会立即关闭主窗口。

由于他们都在调用相同的代码,我不知道QPushButton.clicked信号导致主窗口关闭的原因。

非常感谢任何从哪里开始寻找的帮助。

1 个答案:

答案 0 :(得分:-1)

经过大量的工作,首先创建一个简单版本的ui,其中一切正常,然后慢慢地从破碎的ui中逐步添加代码,我终于找出了产生问题的原因。

原来是在QtDesigner创建的ui文件中 - 几乎是我添加到测试脚本的最后一件事,我自己生成的故障更可能出现在我自己的代码中。

在QtDesigner中,我添加了button.clicked和action.triggered之间的连接到MainWindow.close()。一旦我在QtDesigner中删除了这些链接并重新生成了ui文件,菜单操作和按钮就会正常工作。