2011-11-23 370 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