2011-11-23 33 views
2

在我的應用程序中,我有一個QWidget,在我呼叫show()後沒有顯示,即使isVisible返回trueQWidget在調用show()後未顯示()

此小部件是從主應用程序窗口的事件創建的。但是當它自己開始時,即作爲應用程序中唯一的小部件,它通常會顯示出來。

任何人都知道什麼可能會導致此行爲?

在我的應用程序中的其他小部件通常只顯示這一個給我麻煩。它實際上用於在Qt4的先前版本下工作得很好(不記得是哪個版本)。

的插件的代碼here

更新:Windows似乎出現並立即銷燬。

+0

該腳本中的哪個對象指的是?什麼事件創造它?你是什​​麼意思的「顯示」 - 顯示爲一個子部件,或顯示爲一個單獨的窗口? – ekhumoro

+0

類Scatmat創建一個Qwidget,pw,它應該顯示爲一個單獨的窗口。激活它的平臺是來自同一項目的main.py的MainWindow類的「on_actionScatterplot_Matrix_activated」。如果你執行了scatmat模塊,你將會看到這個小部件,因爲它應該在應用程序中使用。 – fccoelho

+0

這是一個奇怪的設計。爲什麼'Scatmat'不是從'QWidget'派生的? – Avaris

回答

4

相關的代碼是在hidx/GUI/main.py

@pyqtSignature("") 
def on_actionScatterplot_Matrix_activated(self): 
    ... 
    spm = scatmat.ScatMat(pars, self.currentdbname) 
    print "==>", spm.pw.isVisible() 
    spm.pw.hide() 
    spm.pw.showMaximized() 
    print spm.pw.size() 
    print "==>", spm.pw.isVisible() 

@pyqtSignature("int") 
def on_rowStart_valueChanged(self, p0): 
    ... 

on_actionScatterplot_Matrix_activated,您創建的ScatMat一個實例,但參考不保持它。所以這個窗口會被簡要地顯示出來,然後一旦函數完成,就立即進行垃圾回收。

+0

謝謝Ekhumoro,現在你提到了,它非常明顯! (對我很恥辱)讓我看不到明顯的是過去一段時間以前,我能找到的唯一解釋是Python的垃圾收集器最近變得更加高效了。我甚至在ubuntu 11.04(python 2.7.1)上嘗試了錯誤的代碼,並且QWidget沒有被垃圾收集。我目前使用11.10(python 2.7.2),並且在我遵循你的建議之後,它全部開始工作。 – fccoelho

相關問題