You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在QMainWindow中监听子QWidget关闭事件并调用show_btn_fun方法

实现方案

你可以通过以下两种方式实现弹窗关闭自动触发刷新,优先推荐方案1,适配性更强:

方案1:修改模态弹窗为QDialog类型(修改量最小)

你当前已经将弹窗设置为应用级模态,直接替换为Qt标准模态对话框类QDialog即可利用其同步执行特性,无需修改un.py代码,仅修改main.py中的double_opening方法即可:

def double_opening(self):
    # 该方法将请求所需数据传递给self.window
    for idx in self.tableView.selectionModel().selectedIndexes():
        row_number = idx.row()
        column_number = idx.column()
        # 将原QWidget替换为QDialog
        self.window = QtWidgets.QDialog()
        self.text_to_change = format(self.tableView.model().index(row_number, 2).data())
        self.ui = Ui_Form(self.text_to_change)
        self.ui.setupUi(self.window)
        self.window.setWindowModality(QtCore.Qt.ApplicationModal)
        # 替换show()为exec_(),会阻塞直到弹窗关闭才执行后续代码
        self.window.exec_()
        # 弹窗关闭后自动执行刷新
        self.show_btn_fun()

该方案不管用户是点击确认按钮关闭弹窗,还是点击右上角叉号关闭,都会自动触发刷新。

方案2:绑定弹窗销毁信号(无需修改弹窗类型)

如果你不想改动弹窗的基类,也可以通过绑定关闭销毁信号实现自动刷新,同样只需要修改main.py的double_opening方法:

def double_opening(self):
    # 该方法将请求所需数据传递给self.window
    for idx in self.tableView.selectionModel().selectedIndexes():
        row_number = idx.row()
        column_number = idx.column()
        self.window = QtWidgets.QWidget()
        self.text_to_change = format(self.tableView.model().index(row_number, 2).data())
        self.ui = Ui_Form(self.text_to_change)
        self.ui.setupUi(self.window)
        self.window.setWindowModality(QtCore.Qt.ApplicationModal)
        # 设置关闭弹窗时自动销毁对象
        self.window.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        # 绑定对象销毁信号到刷新方法
        self.window.destroyed.connect(self.show_btn_fun)
        self.window.show()

内容的提问来源于stack exchange,提问作者Emily G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:15:03