【问题标题】:PyQt:Why a popup dialog prevents execution of other code?PyQt:为什么弹出对话框会阻止其他代码的执行?
【发布时间】:2011-12-11 11:53:11
【问题描述】:

I am having a little problem with a pop up dialog.I have a combobox,which when the option changes it pops up a dialog with a textedit widget,do some stuff and insert some text in the textedit widget.

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

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 文件中。

弹出对话框出现,但如果对话框没有关闭,则不能执行其他任何操作。你知道我该如何处理吗?谢谢。

【问题讨论】:

    标签: python pyqt pyqt4 qdialog


    【解决方案1】:

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

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

    【讨论】:

    • 所以使用模态你不能与主应用程序交互,而使用非模态你可以。我用 show() 替换了 exec() 但弹出窗口会在几秒钟内出现和消失,我还需要改变什么?谢谢。
    • 只要您需要,您就需要该对象保持活动状态。它可能需要成为您班级的成员。我猜当函数在你的代码中返回时它会被破坏(但我对 python 不是很熟悉)。
    【解决方案2】:

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

    HTH

    【讨论】:

    • 我选择了全局选项,它起作用了。一个问题是对话框的窗口出现了,然后连接到组合框的下一个函数执行,然后弹出对话框中的小部件出现。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 2011-08-16
      • 2015-11-01
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多