PyQt:为何弹出对话框会阻止其他代码执行?
我遇到了一个小问题,关于弹出对话框。我有一个下拉框,当选择的选项改变时,它会弹出一个对话框,里面有一个文本编辑框,我会在里面做一些操作并插入一些文本。
这是我用来弹出对话框的代码:
def function_1(self):
dialog = QDialog()
dialog.ui = Ui_Dialog_popup()
dialog.ui.setupUi(dialog)
dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose)
dialog.exec_()
我在QtDesigner中制作了弹出窗口的界面代码,并放在一个单独的.py文件里。
弹出对话框是能显示出来的,但如果不关闭这个对话框,后面的代码就无法执行。你知道我该怎么处理这个问题吗?谢谢。
3 个回答
0
因为你设置了 WA_DeleteOnClose
这个窗口属性,我猜测你是想每次调用 function_1
方法的时候都创建一个新的对话框(这可能是个好主意)。
如果是这样,解决你问题的最简单方法(根据你提供的代码)就是给你的对话框指定一个父窗口(这样它就能保持活着),然后使用 show()
方法以 无模式 的方式显示它:
def function_1(self):
dialog = QDialog(self)
dialog.ui = Ui_Dialog_popup()
dialog.ui.setupUi(dialog)
dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose)
dialog.show()
1
进一步解释一下Mat说的内容:show()这个函数会立刻返回,而dialog是这个函数内部的一个局部变量,所以当"function_1"这个函数结束时,dialog这个对象就会被删除。你可能想把dialog设置成一个成员变量或者全局变量(根据你的需求来选择),这样这个对象就能一直保留在内存中。
希望这对你有帮助!
5
这正是QDialog
的exec
方法的用途:用于模态对话框。你可以看看“模态”和“非模态对话框”这两个部分。
如果你不想让这个对话框阻塞你的主界面,可以使用show()
来代替exec()
(同时查看一下modal
属性的相关文档)。