python-form不使用show方法显示

时间:2012-02-11 07:03:18

标签: python qt pyqt

我正在使用QGIS的python插件。我的主要形式为 DlgQueryBuilder.py ,另一种形式为 DlgDberror.py ,它在查询中显示错误。我 DlgDberror.py 包含以下内容:

class DlgDbError(QtGui.QWidget, Ui_DlgDbError):
def __init__(self,e,parent):


    QtGui.QWidget.__init__(self)
    Ui_DlgDbError.__init__(self)
    self.setupUi(self)
    msg = "<pre>" + e.msg.replace('<','&lt;') + "</pre>"


    self.txtMessage.setHtml(msg)



@staticmethod
def showError(e, parent):

    dlg = DlgDbError(e,parent)
    dlg.show()

来自 DlgQueryBuilder.py 的调用是“ DlgDbError.showError(e,self)” 一切顺利但当我尝试运行我的主要表单 DlgQueryBuilder.py 时,* DlgDberror.py *表单未显示。它会在一秒钟内消失。 dlg.show()应该工作吗?

1 个答案:

答案 0 :(得分:1)

showError退出时,dlg被垃圾收集并消失,这也会破坏底层的Qt对象和对话框。我怀疑你需要以某种方式将对话框传回QGIS,以便它可以处理对话框所需的任何内容。所以是的,show()有效,但是你的程序在它可以做任何有用的事情之前就破坏了对话框。

也许你想要exec_()?它将弹出对话框,然后阻止等待用户关闭对话框。这称为模态对话框。见http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qdialog.html