为什么在QMainWindow中使用Qt Designer创建的QDialogButtonBox点击无响应?
问题根因
accept()、reject()是QDialog类的专属内置方法,你使用主窗口模板时,继承的父类是QMainWindow,本身没有这两个方法,所以会触发属性不存在的报错,和是否导入QDialog没有关联。
另外你不修改自动生成的simpleMain.py的做法是正确的,pyuic工具每次从ui文件生成代码时都会覆盖该文件的内容,手动修改的内容会丢失,所有业务逻辑都应该写在主程序文件中。
解决方法
直接修改主程序文件simpleMain-A.py,手动绑定按钮的点击信号到自定义槽函数即可,修改后的完整代码如下:
import sys from PyQt5.QtWidgets import QApplication, QMainWindow from simpleMain import Ui_MainWindow class AppWindow(QMainWindow): def __init__(self): super().__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) # 绑定按钮信号到自定义槽函数 self.ui.buttonBox.accepted.connect(self.on_ok_clicked) self.ui.buttonBox.rejected.connect(self.on_cancel_clicked) def on_ok_clicked(self): # 此处添加点击OK按钮需要执行的业务逻辑 print("OK按钮被触发") self.close() # 如需点击后关闭窗口可保留本行 def on_cancel_clicked(self): # 此处添加点击Cancel按钮需要执行的业务逻辑 print("Cancel按钮被触发") self.close() # 如需点击后关闭窗口可保留本行 if __name__ == "__main__": app = QApplication(sys.argv) window = AppWindow() window.show() sys.exit(app.exec_())
说明
- 本次修改完全不涉及自动生成的ui代码文件,后续重新编译ui文件不会影响业务逻辑。
- 如果你不需要主窗口的菜单栏、工具栏、状态栏等能力,只是需要简单的交互弹窗,直接使用「底部带按钮的对话框」模板开发效率更高。
内容的提问来源于stack exchange,提问作者user17362664
相关产品推荐
相关产品推荐

