我正在使用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('<','<') + "</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()应该工作吗?
答案 0 :(得分:1)
当showError
退出时,dlg
被垃圾收集并消失,这也会破坏底层的Qt对象和对话框。我怀疑你需要以某种方式将对话框传回QGIS,以便它可以处理对话框所需的任何内容。所以是的,show()
有效,但是你的程序在它可以做任何有用的事情之前就破坏了对话框。
也许你想要exec_()
?它将弹出对话框,然后阻止等待用户关闭对话框。这称为模态对话框。见http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qdialog.html