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

Python 为什么弹出对话框会阻止其他代码的执行?,python,pyqt,pyqt4,qdialog,Python,Pyqt,Pyqt4,Qdialog,我有一个弹出对话框的小问题。我有一个组合框,当选项更改时,它会弹出一个带有文本编辑小部件的对话框,执行一些操作并在文本编辑小部件中插入一些文本 这是我用于弹出窗口的内容: def function_1(self): dialog = QDialog() dialog.ui = Ui_Dialog_popup() dialog.ui.setupUi(dialog) dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose)

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

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

def function_1(self):
    dialog = QDialog()
    dialog.ui = Ui_Dialog_popup()
    dialog.ui.setupUi(dialog)
    dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose)
    dialog.exec_()
我在一个单独的py文件中使用QtDesignere生成了弹出式gui代码


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

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


如果您不希望对话框阻止主UI,请调用
show()
,而不是
exec()
(并检查属性文档)

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


HTH

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

如果是这样,解决问题的最简单方法(基于您给出的代码)是为您的对话框提供一个父对话框(使其保持活动状态),然后使用
show()


因此,使用modal,您无法与主应用程序交互,而使用非MODEL,您可以交互。我将exec()替换为show(),但弹出窗口会在几秒钟内出现和消失,我还需要更改什么?谢谢。你需要那个东西,只要你需要它,它就会一直活着。它可能需要是你们班的一员。我猜当函数返回到代码中时,它会被破坏(但我对python不是很熟悉)。我使用了全局选项,它成功了。一个问题是对话框的窗口出现,然后连接到组合框的下一个函数执行,然后弹出对话框中的小部件出现。
def function_1(self):
    dialog = QDialog(self)
    dialog.ui = Ui_Dialog_popup()
    dialog.ui.setupUi(dialog)
    dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose)
    dialog.show()