2012-08-06 13 views
8

मैं चेकबॉक्स चेक किया गया है या नहीं, इस पर निर्भर करता है कि मैं दो लेआउट में से एक को प्रदर्शित करने की कोशिश कर रहा हूं।पासाइड शो/छुपाएं लेआउट

केवल विगेट्स का उपयोग कर रहा जिसके बाद ठीक काम करता है कर सकते हैं: (इस उदाहरण में प्रत्येक विजेट है एक 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 को गठबंधन करने के लिए। मैं एडेलेआउट/निकालने का प्रयास कर रहा हूं/निकालें I विजेट को विजेट्स के बजाय लेआउट पर उपरोक्त करने के लिए प्रयास कर रहा हूं, लेकिन इसे काम पर नहीं लाया जा सकता है। कार्यक्रम मेरी आखिरी कोशिश पर दुर्घटनाग्रस्त हो गया।

दो लेआउट के बीच स्विच करने का सबसे आसान तरीका क्या है? इसे चेकबॉक्स का उपयोग करने की ज़रूरत नहीं है लेकिन मैं इसे पसंद करूंगा।

उत्तर

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' का उपयोग किया जाता है। मैं एक उदाहरण बनाउंगा। –

संबंधित मुद्दे