मेरे पास एक विजेट है जो एक विकल्प को टॉगल करते समय बदलता है। यह सभी लेआउट और विजेट को अमान्य करता है। मैं सभी लेआउट की सूची रखने के लिए, तो मैं कुछ इसी तरह का उपयोग कर उन्हें नष्ट कर सकते हैं this answer रहे हैं:किसी अन्य लेआउट के साथ QWidget पर लेआउट को प्रतिस्थापित करना
class MyWidget(QFrame):
# ...
def reLayout(self):
def deleteLayoutChilds(l):
while l.count():
item=l.takeAt(0)
widget=item.widget()
if widget: widget.deleteLater()
else: deleteLayoutChilds(item.layout())
for l in self.allLayouts: deleteLayoutChilds(l)
# now install the new layout
##
## how to delete the old layout first?
l=self.layout(); del l # no effect
#
layout=QGridLayout(self)
## warning: QLayout: Attempting to add QLayout "" to MyWidget "", which already has a layout.
मैं कैसे पुराने लेआउट से छुटकारा पा सकते हैं और नया सेट?
प्रलेखन quite terse है और जाहिरा तौर पर सीधे अजगर पर लागू नहीं:
QWidget.setLayout (स्वयं, QLayout)
QLayout तर्क यह क्यूटी को हस्तांतरित स्वामित्व है है।
इस विजेट के लिए लेआउट प्रबंधक को लेआउट में सेट करता है।
यदि इस विजेट पर पहले से ही एक लेआउट प्रबंधक स्थापित है, तो QWidget आपको एक और स्थापित करने नहीं देगा। इससे पहले कि आप सेट लेआउट() को नए लेआउट के साथ कॉल कर सकें, आपको पहले मौजूदा लेआउट मैनेजर (लेआउट() द्वारा लौटाया जाना चाहिए) को पहले हटा देना होगा।
यदि लेआउट एक अलग विजेट पर लेआउट प्रबंधक है, तो setLayout() लेआउट को अभिभावक करेगा और इसे इस विजेट के लिए लेआउट प्रबंधक बना देगा।
उदाहरण:
QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(formWidget); setLayout(layout);
इस कार्यप्रणाली को कॉल के लिए एक वैकल्पिक लेआउट के निर्माता को यह विजेट पारित करने के लिए है।
QWidget लेआउट का स्वामित्व लेगा।
लेआउट() और लेआउट प्रबंधन भी देखें।
+1(): लेकिन आप एक अस्थायी
QObjectCleanupHandler
जो, ऊपर समाधान की तरह, वस्तु (रों) इसे तुरंत होता है के साथ हटा दिया जाएगा करने के लिए वस्तु में जोड़ सकते हैं । – astrojuanlu