2012-03-12 3 views
0

패널이나 위젯을 만드는 방법이 확실하지 않습니다. 플레이어가 무언가를 클릭 할 때 나타납니다.정보를 문맥 상 PySide에 표시하는 방법은 무엇입니까?

Qt 디자이너에서 위젯을 만들고 show()/hide()를 사용했지만 show(); 숨는 장소(); show() 두 번째 show 문이 작동하지 않고 아무 것도 그려지지 않습니다.

gridLayout에 삽입하면 전체 격자가 50/50으로 분할되어 패널에 최대 크기를 설정할 수 없으며 레이아웃에서 위젯을 제거 할 수 없다는 문제가 있습니다. 분할을 100 %로 다시 변경하십시오. stackoverflow를 검색했지만 찾을 수있는 모든 것은 표시해야하는 제안()/숨김()으로 광고 된대로 작동하지 않는 것 같습니다. 다른 사람이 통찰력을 가지고 있습니까? 그것은 쉽게 할 수있는 무언가 같이 보인다.

추신 : 나는 그것이 쓸모있는 한 어떻게 보이는지 상관하지 않습니다. 이 프로젝트의 목표 중 일부는 게임을 가능한 한 빨리, 못생긴 정도로 구축하는 것입니다.

편집 : 요청에 의해 추가 테스트 케이스 ... 나는 그러나 Qt는 디자이너/QML 로딩없이 작성 시험의 경우에 재현하는 문제를 얻을 수 없었습니다

class GameWindow(QtGui.QWidget): 
    def __init__(self): 
     super(GameWindow, self).__init__() 

     # Load ui file. 
     loader = QtUiTools.QUiLoader() 
     file_ = QtCore.QFile("forms/GameWindow.ui") 
     file_.open(QtCore.QFile.ReadOnly) 
     self = loader.load(file_,self) 

     # Add viewport. 
     self.viewport = GameViewport(self) 
     self.gridLayout.addWidget(self.viewport, 0, 0) 
     self.horizontalScrollBar.valueChanged.connect(self.viewport.update) 
     self.verticalScrollBar.valueChanged.connect(self.viewport.update) 

     # Add planetDetails 
     self.planetDetails = PlanetDetails(None) 

     # Show and perform initial draw.  
     self.show() 

class GameViewport(QtGui.QWidget): 
    def __init__(self,parent): 
     super(GameViewport,self).__init__() 

     self.parent = parent 
    def mousePressEvent(self,event): 
     self.parent.planetDetails.set_planet(None) 

class PlanetDetails(QtGui.QWidget): 
    def __init__(self,parent): 
     super(PlanetDetails, self).__init__() 

     self.parent = parent 

     self.planet = None 

     # Load ui file. 
     loader = QtUiTools.QUiLoader() 
     file_ = QtCore.QFile("forms/PlanetDetails.ui") 
     file_.open(QtCore.QFile.ReadOnly) 
     self = loader.load(file_,self) 

     self.pushButton.clicked.connect(self.hide) 

    def set_planet(self, planet): 
     self.planet = planet 
     self.show() 

.

+0

"작동하지 않는"코드를 붙여야합니다. 당신이하고있는 것을 보지 않고서는 문제를 정확하게 지적하기가 어렵습니다. 'show/hide'와'QGridLayout'는 확실히 예상대로 동작합니다. – Avaris

+0

테스트 케이스가 추가되었습니다. QGridLayout이 QGridLayout 대신 무엇을 사용해야하는지에 따라 동작해야한다면 필요한 동작을 얻으려고합니까? – Tarinaky

+0

아니요. QGridLayout은 원하는대로 동작합니다. 단일 항목으로 100 % 소요됩니다. 둘 이상으로 크기 정책에 따라 나눕니다. 나는 당신의 코드를 실행하고 관찰하기 위해 여전히'* .ui' 파일이 필요하다. 그러나'self = loader.load (file_, self)'행은 의심스러워 보인다. 위젯의 부모를 스스로 설정하고 있습니다. – Avaris

답변

0

나는이 문제가 '자기'에 대한 나의 임무에 있다고 생각한다. 설명서에서 예를 잘못 읽은 것으로 보입니다. Qt Designer의 기능에 대한 액세스 권한을 잃지 않고 올바른 동작을 얻는 방법은 확실하지 않지만 적어도 오류의 위치는 알고 있습니다.

관련 문제