2012-08-06 49 views
8

Bir onay kutusunun işaretli olup olmadığına bağlı olarak iki düzenden birini göstermeye çalışıyorum.pyside göster/gizle paftaları

Sadece ben gayet iyi çalışıyor aşağıdakileri yapabilirsiniz aletler kullanarak: Her QLineEdit açıklayıcı bir etiket eklemek istiyorum çünkü, ihtiyacım,

myCheckbox.stateChanged.connect(switchControls) 

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

Ancak (bu örnekte her widget bir QLineEdit olan) QLineEdit + QLabel'i bir tür düzende veya bir kapta birleştirmek için. Yukarıdaki widget'lar yerine mizanpajları yapmak için addlayout/removeLayout/removeItem'i deniyorum, ancak işe yaramayacağım. Son denememde program çöktü.

İki düzen arasında geçiş yapmanın en kolay yolu nedir? Bir onay kutusu kullanmak zorunda değil ama bunu tercih ederim.

cevap

9

Düzenleri ayrı parçacıklara yerleştirin. Artık "sadece widget'ları kullanıyorsunuz".

İşte bir örnek:

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

Çalıştır o nasıl çalıştığını görmek için.

+0

"Yalnızca widget'ları kullanarak" yazmalıydım. İçeri nasıl bir widget yerleştirebilirim? Widget'ların düzenlere gittiğini düşündüm, başka bir şekilde değil. – user985366

+1

Çoğu widget'a bir düzen yerleştirebilirsiniz. Çoğu zaman 'QWidget' ve' QFrame' kullanılır. Bir örnek vereceğim. –

İlgili konular