PyQt:为什么弹出对话框会阻止执行其他代码?

时间:2011-12-11 11:53:12

标签: python pyqt pyqt4 qdialog

我有一个弹出对话框的问题。我有一个组合框,当选项更改时会弹出一个带有textedit小部件的对话框,执行一些操作并在textedit小部件中插入一些文本。

这就是我用于弹出窗口的内容:

def function_1(self):
    dialog = QDialog()
    dialog.ui = Ui_Dialog_popup()
    dialog.ui.setupUi(dialog)
    dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose)
    dialog.exec_()

我在QtDesignere中使用弹出的gui代码在一个单独的py文件中。

弹出对话框出现,但如果对话框未关闭,则无法执行任何其他操作。您知道我该如何处理此问题?感谢。

3 个答案:

答案 0 :(得分:5)

这正是QDialogexec方法的设计目的:模态对话框。阅读“模态”和“无模式对话框”部分。

如果您没有阻止主UI的对话框,请拨打show()而不是exec()(并查看modal属性文档)。

答案 1 :(得分:1)

详细说明Mat所说的内容:show()函数会立即返回,并且由于对话框是此函数的本地对象,因此只要“function_1”返回,对象就会被删除。您可能希望将对话框设置为成员或全局(以适合您的要求为准),以便对象保留在内存中。

HTH

答案 2 :(得分:0)

由于您正在设置WA_DeleteOnClose窗口属性,我假设您希望每次调用function_1方法时都要创建一个新对话框(这可能是一个好主意)。

如果是这样,解决问题的最简单方法(基于您已经给出的代码)是给对话框一个父级(因此它保持活动状态),然后显示它modelessly使用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()