Форум сайта python.su
Вопрос такой, написал следующий код и вроде все работает, но не нравится то, что 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_())
Офлайн
Не совсем понял, что хотите. Можно задать минимальный размер фрэймов
for frame in (self.choice1, self.choice2): frame.setMinimumHeight(25)
Отредактировано reclosedev (Март 26, 2013 19:46:18)
Офлайн