2011-11-23 10 views
2

내 앱에서 isVisibletrue을 반환하더라도 show()을 호출 한 후 QWidget이 표시되지 않습니다.show()를 호출 한 후 QWidget이 보이지 않음

이 위젯은 기본 애플리케이션 창의 이벤트에서 생성됩니다. 그러나 앱 자체에서 시작될 때, 즉 앱의 유일한 위젯으로 정상적으로 나타납니다.

누구든지이 동작의 원인을 알고 있습니까?

내 앱의 다른 위젯이 정상적으로 표시되는 데 문제가 발생합니다. 실제로 Qt4의 이전 버전에서 잘 작동하는 데 사용됩니다 (기억하지 마십시오).

위젯 코드 here

업데이트입니다 : 창이 나타납니다 것으로 보인다 즉시 파괴된다.

+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

에쿠 모로 감사합니다. 언급 했으니까요. (나에게 부끄럽다) 내가 오래 전에 발견 한 유일한 설명은 파이썬의 가비지 컬렉터가 최근에 더 효율적이라는 사실이다. 난 우분투 11.04 (파이썬 2.7.1)에서 오류 코드를 시도하고 QWidget는 가비지 수집하지 않았다. 나는 현재 11.10 (파이썬 2.7.2)을 사용하고 제안을 따랐을 때 모두 작동하기 시작했다. – fccoelho

관련 문제