2012-02-11 75 views
0

我與Python插件QGIS.I工作不顯示蟒蛇形式有我的主要形式爲DlgQueryBuilder.py和另一種形式爲DlgDberror.py,它會顯示錯誤的query.My DlgDberror.py 包含以下內容:使用show方法

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(即個體經營)」 一切順利光滑,但當我嘗試運行我的主要形式DlgQueryBuilder.py,* DlgDberror.py *表格不顯示。它在一秒鐘內消失。 dlg.show()應該工作儀式?

回答

1

showError退出時,dlg被垃圾收集並消失,這也會破壞底層的Qt對象和對話框。我懷疑你需要以某種方式將對話返回給QGIS,以便它可以處理對話框中的任何必要的對話。所以是的,show()的作品,但你的程序在它可以做任何有用的事情之前破壞對話。

也許你想exec_()?它會彈出對話框,然後阻止等待用戶關閉對話框。這被稱爲模態對話框。請參閱http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qdialog.html

+0

如果我使用dlg.exec_(),那麼它會給出錯誤,說TypeError:'sip.methoddescriptor'對象不可調用... – poonam 2012-02-11 07:53:28

+0

哦,當然。我以某種方式認爲你試圖展示一個對話。看起來你已經構建了一個QWidget。你是否想從QDialog繼承?您是否在遵循http://www.qgis.org/pyqgis-cookbook/plugins.html#plugins上的文檔來創建插件? – gfortune 2012-02-11 08:31:16