【问题标题】:PyQt5 QMessageBox dialog closes main window from QPushButton but not QActionPyQt5 QMessageBox 对话框从 QPushButton 关闭主窗口,但不是 QAction
【发布时间】:2018-08-10 16:17:43
【问题描述】:

也许是一个愚蠢的问题,因为我对 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 对象

slot self.quit 会打开一个 QtWidgets.QMessageBox.question 对话框,该对话框设置为提供带有 yes/no/cancel 响应的文件保存,但该对话框的功能因调用位置而异。

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

由于它们都调用相同的代码,我不知道为什么 QPushButton.clicked 信号会导致主窗口关闭。

非常感谢您在哪里开始寻找任何帮助。

【问题讨论】:

  • 可能是矩阵中的故障。大声笑,老实说,这听起来很疯狂,我们需要查看更多代码
  • 好的,谢谢。我生成了一个带有单个菜单项和一个按钮的简单 MainWindow,并构建了单个 Python3 脚本来运行它,一切都按预期工作。显然我在某处做了一些愚蠢的事情,我将不得不回溯我的代码。由于我的代码是模块化的,所以当我发现问题出在哪里时,我必须对其进行去模块化、调试和重新模块化。如果结果证明为其他人提供有用的信息(一个 GOTCHA),我会发布我的发现。

标签: python pyqt5 signals-slots qt-designer


【解决方案1】:

经过大量工作,首先创建一个简单版本的用户界面,一切正常,然后从损坏的用户界面中慢慢添加代码,一点一点,我终于找出了导致问题的原因。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 2023-04-01
    • 2023-01-24
    • 1970-01-01
    • 2020-10-17
    • 2015-07-16
    相关资源
    最近更新 更多