如何在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
相关产品推荐
相关产品推荐

