2012-08-06 31 views
8

Estoy tratando de mostrar uno de dos diseños dependiendo de si una casilla de verificación está marcada o no.pyside show/hide layouts

usando solamente los widgets que pueda hacer lo siguiente, que funciona bien: (cada widget en este ejemplo es una 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() 

Sin embargo, ya que quiero añadir una etiqueta descriptiva para cada QLineEdit, necesito para combinar QLineEdit + QLabel en un diseño o contenedor de algún tipo. He estado probando addlayout/removeLayout/removeItem para hacer lo anterior en diseños en lugar de widgets, pero no puedo hacer que funcione. El programa se bloqueó en mi último intento.

¿Cuál es la forma más fácil de cambiar entre dos diseños? No tiene que usar una casilla de verificación, pero preferiría eso.

Respuesta

9

Coloque los diseños en widgets separados. Ahora estás "solo usando widgets".

He aquí un ejemplo:

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

ejecutarlo para ver cómo funciona.

+0

Debería haber escrito "using only widgets". ¿Qué tipo de artilugio puedo poner dentro de un diseño? Pensé que los widgets entran en diseños, no a la inversa. – user985366

+1

Puede poner un diseño en la mayoría de los widgets. Con mucha frecuencia se usan 'QWidget' y' QFrame'. Haré un ejemplo. –

Cuestiones relacionadas