2012-03-12 11 views
0

私はパネルやウィジェットを作る方法やプレイヤーが何かをクリックしたときに表示される - 何かがわかりません。情報をPySideに文脈的に表示するには?

Qt Designerでウィジェットを作ってみましたが、show()/ hide()を使ってみましたが、show();隠す(); show()は、2番目のshow文がうまくいかず、何も描画されません。

gridLayoutに挿入するとグリッド全体が50/50に分割されます - パネルの最大サイズを設定できません - レイアウトからウィジェットを削除することはできません分割を100%に戻します。 私はstackoverflowを検索しましたが、アドバイスされたようには動作しないように見えるように、私はshow()/ hide()を行うべきです。他の誰かが洞察力を持っていますか?それは簡単にできなければならないもののようです。

PS:使用可能な限り、どのように見えますか?このプロジェクトの目的の一部は、できるだけ早く、醜い方法でゲームを構築することです。

編集:要求によってテストケースを追加しています...

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() 

しかし私はQtのデザイナー/ QMLロードせずに書かれたテストケースで再現する問題を取得することができませんでした。

+0

「正常でない」コードを貼り付ける必要があります。あなたが何をしているのかを見ることなく、問題を特定するのは難しいです。 'show/hide'と' QGridLayout'は期待通りに動作します。 – Avaris

+0

テストケースが追加されました。 QGridLayoutは、QGridLayoutの代わりに何を使用する必要があるかのように振る舞う必要がある場合、必要な動作を取得するには? – Tarinaky

+0

いいえ、QGridLayoutはあなたが望むように動作します。単品では100%かかります。複数の場合、サイズポリシーに従って分割されます。あなたのコードを実行して観察するために '* .ui'ファイルが必要ですが、' self = loader.load(file_、self) 'の行は不審なものです。ウィジェットの親をそれ自身に設定しています。 – Avaris

答えて

0

私はこの問題が私の「自己」への帰属にあると信じています。私はドキュメントの例を誤解しているようです。 Qt Designerの機能へのアクセスを失うことなく正しい動作を得る方法は完全にはわかりませんが、少なくともエラーがどこにあるかはわかります。

関連する問題