2012-08-06 66 views
8

チェックボックスがオンかどうかによって2つのレイアウトのいずれかを表示しようとしています。pysideレイアウトの表示/非表示

私だけが正常に動作し、次の操作を行うことができウィジェットを使用して: は、私はそれぞれにQLineEditに説明ラベルを追加するために、私が必要とする、

myCheckbox.stateChanged.connect(switchControls) 

def switchControls (self, state): 
    if state == 2: 
     self.widget1.show() 
     self.widget2.hide() 
    else: 
     self.widget1.hide() 
     self.widget2.show() 

しかし(この例では、各ウィジェットはにQLineEditです)ある種のレイアウトやコンテナにQLineEdit + QLabelを組み合わせることができます。 私はaddlayout/removeLayout/removeItemを使ってウィジェットの代わりにレイアウトを行いましたが、動作させることはできません。プログラムは私の最後の試行でクラッシュしました。

2つのレイアウトを切り替える最も簡単な方法は何ですか?それはチェックボックスを使用する必要はありませんが、私はそれを好むでしょう。

答えて

9

別々のウィジェットにレイアウトを配置します。今、あなたは「ウィジェットのみを使用しています」。ここで

は例です:

from PySide.QtCore import * 
from PySide.QtGui import * 

class MainWindow(QWidget): 
    def __init__(self): 
     QWidget.__init__(self) 

     self.layout=QVBoxLayout() 
     self.setLayout(self.layout) 


     self.checkbox=QCheckBox("Layouts") 
     self.layout.addWidget(self.checkbox) 


     self.widget1=QWidget() 
     self.layout.addWidget(self.widget1) 

     self.layout1=QVBoxLayout() 
     self.widget1.setLayout(self.layout1) 

     self.layout1.addWidget(QLabel("First layout")) 

     self.layout1.addWidget(QTextEdit()) 


     self.widget2=QWidget() 
     self.layout.addWidget(self.widget2) 

     self.layout2=QHBoxLayout() 
     self.widget2.setLayout(self.layout2) 

     self.layout2.addWidget(QTextEdit("Second layout")) 

     self.layout2.addWidget(QTextEdit()) 


     self.checkbox.toggled.connect(self.checkbox_toggled) 
     self.checkbox.toggle() 

     self.show() 

    def checkbox_toggled(self, state): 
     self.widget1.setVisible(state) 
     self.widget2.setVisible(not state) 

app=QApplication([]) 
mw=MainWindow() 
app.exec_() 

は、それがどのように動作するかを確認するために、それを実行します。

+0

「ウィジェットのみを使用」と書かれているはずです。どのような種類のウィジェットをレイアウトに入れることができますか?私はウィジェットがレイアウトになると思った。 – user985366

+1

ほとんどのウィジェットにレイアウトを配置できます。ほとんどの場合、 'QWidget'と' QFrame'が使われます。私は例を挙げます。 –