2012-08-06 24 views
8

Próbuję wyświetlić jeden z dwóch układów w zależności od tego, czy pole wyboru jest zaznaczone, czy nie.pyside pokaż/ukryj układy

Tylko za pomocą widgetów mogę wykonać następujące czynności które działa prawidłowo: (każdy widżet w tym przykładzie jest 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() 

Jednak, ponieważ chcę, aby dodać opisową etykietę do każdego QLineEdit, muszę połączyć QLineEdit + QLabel w jakiś układ lub kontener. Próbowałem addlayout/removeLayout/removeItem, aby zrobić powyższe na układach zamiast widżetów, ale nie mogę go uruchomić. Program rozbił się podczas mojej ostatniej próby.

Jaki jest najprostszy sposób przełączania między dwoma układami? Nie musi używać pola wyboru, ale wolałbym to.

Odpowiedz

9

Układaj układy w osobne widżety. Teraz "używasz tylko widżetów".

Oto przykład:

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

Run to, aby zobaczyć jak to działa.

+0

Powinienem napisać "używając tylko widżetów". Jaki rodzaj widżetu mogę umieścić w środku? Myślałem, że widżety przechodzą do układów, a nie w drugą stronę. – user985366

+1

Możesz umieścić układ w większości widżetów. Najczęściej używane są 'QWidget' i' QFrame'. Zrobię przykład. –