2012-08-06 13 views
8

Sto provando a visualizzare uno dei due layout a seconda se una casella di controllo è selezionata o meno.scene mostra/nascondi layout

Solo utilizzando i widget che posso fare quanto segue, che funziona bene: (ciascun widget in questo esempio è un 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() 

Tuttavia, dal momento che voglio aggiungere un'etichetta descrittiva per ogni QLineEdit, ho bisogno combinare una QLineEdit + QLabel in un layout o contenitore di qualche tipo. Ho provato l'addlayout/removeLayout/removeItem a fare quanto sopra sui layout invece dei widget, ma non riesco a farlo funzionare. Il programma si è bloccato durante il mio ultimo tentativo.

Qual è il modo più semplice per passare da un layout all'altro? Non è necessario utilizzare una casella di controllo, ma preferirei che.

risposta

9

Inserire i layout in widget separati. Ora stai "solo usando i widget".

Ecco un esempio:

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

eseguirlo per vedere come funziona.

+0

Avrei dovuto scrivere "utilizzando solo i widget". Che tipo di widget posso inserire all'interno di un layout? Pensavo che i widget andassero nei formati, non nel contrario. – user985366

+1

È possibile inserire un layout nella maggior parte dei widget. Molto spesso vengono usati 'QWidget' e' QFrame'. Farò un esempio –

Problemi correlati