Вопрос такой, написал следующий код и вроде все работает, но не нравится то, что QFrame не возвращает минимальный размер, то есть я хочу чтобы после каждого выбора в комбобоксе окно и фреймы принимала более естественный размер. Не могу найти слов, чтобы обьяснить точнее, попробуйте запустить код и попереключать комбобокс.
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
UPPER,LOWER,BOTH = range(3)
class MainWind(QtGui.QWidget):
def __init__(self, parent=None):
super(MainWind, self).__init__(parent)
label_choose = QtGui.QLabel('Выбор отображаемых фреймов')
self.choose = QtGui.QComboBox()
self.choose.addItems(['Используется верхний',
'Используется нижний',
'Используются оба'])
self.choice1 = QtGui.QFrame(self)
self.choice1.setFrameStyle(QtGui.QFrame.NoFrame |
QtGui.QFrame.Plain)
self.choice2 = QtGui.QFrame(self)
self.choice2.setFrameStyle(QtGui.QFrame.NoFrame |
QtGui.QFrame.Plain)
label = QtGui.QLabel(' Нижний элемент')
vbox = QtGui.QVBoxLayout()
vbox.addWidget(self.choose)
vbox.addWidget(self.choice1)
vbox.addWidget(self.choice2)
vbox.addWidget(label)
self.setLayout(vbox)
self.on_show(self.choose.currentIndex())
self.choose.currentIndexChanged["int"].connect(self.on_show)
def on_show(self, num):
self.clearLayout(self.choice1)
self.clearLayout(self.choice2)
if num == UPPER:
label = QtGui.QLabel('Для примера 1')
vbox = QtGui.QVBoxLayout()
vbox.addWidget(label)
self.choice1.setLayout(vbox)
elif num == LOWER:
label2 = QtGui.QLabel('Для примера 2')
vbox2 = QtGui.QVBoxLayout()
vbox2.addWidget(label2)
self.choice2.setLayout(vbox2)
elif num == BOTH:
label1 = QtGui.QLabel('Для примера 1')
label2 = QtGui.QLabel('Для примера 2')
vbox1 = QtGui.QVBoxLayout()
vbox1.addWidget(label1)
self.choice1.setLayout(vbox1)
vbox2 = QtGui.QVBoxLayout()
vbox2.addWidget(label2)
self.choice2.setLayout(vbox2)
def clearLayout(self, widget):
if widget.layout() is not None:
old_layout = widget.layout()
for i in reversed(range(old_layout.count())):
old_layout.itemAt(i).widget().setParent(None)
import sip
sip.delete(old_layout)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
window = MainWind()
window.show()
sys.exit(app.exec_())