def __init__(self):
super().__init__()
self.order_list = [str(i) * 2 * i for i in range(20)]
self.space = 18
self.init_ui()
def init_ui(self):
self.setGeometry(300, 300, 300, 300)
self.layout = Qw.QGridLayout(self)
self.menu = Qw.QWidget()
self.menu.setFixedHeight(self.space * len(self.order_list) + 5)
self.menu.items = []
for n, i in enumerate(self.order_list):
btn = Qw.QCheckBox(i, self.menu)
btn.move(5, self.space * n + 5)
btn.setFixedHeight(15)
self.menu.items.append(btn)
self.menu_scroll = Qw.QScrollArea()
self.menu_scroll.setWidgetResizable(True)
self.menu_scroll.setWidget(self.menu)
self.layout.addWidget(self.menu_scroll, 0, 0, 1, 1)
self.layout.setColumnStretch(0, 10)
self.rec = Qw.QWidget()
self.rec_box = Qw.QVBoxLayout(self.rec)
self.rec.setLayout(self.rec_box)
self.rec_scroll = Qw.QScrollArea()
self.rec_scroll.setWidget(self.rec)
self.layout.addWidget(self.rec_scroll, 0, 1, 1, 1)
self.layout.setColumnStretch(1, 9)
self.order_btn = Qw.QPushButton('Order')
self.order_btn.setFixedSize(80, 30)
self.order_btn.clicked.connect(self.get_ordered)
self.layout.addWidget(self.order_btn, 1, 0, 1, 2, alignment=Qc.Qt.AlignCenter)
Итак, у меня есть этот код.Он состоит из сетки с двумя QScrollAreas и одной кнопкой.Мне нужно установить фиксированный размер self.menu, чтобы его можно было прокручивать все время, пока он недостаточно велик.Уже сделано с вертикалью, но как я могу изменить размер меню до самого большого размера виджета?Установка WidgetResizeable в False просто делает ScrollArea пустым.(Не смотрите на правую область, я изменю ее, когда левая будет удалена)
Я должен также упомянуть, что нужно добавить некоторые виджеты при нажатии на order_btn.Вот как работает код с макетами, но он нарушает интервалы и размещение.
def __init__(self):
super().__init__()
self.order_list = [str(i) * 2 * i for i in range(20)]
self.space = 10
self.init_ui()
def init_ui(self):
self.setGeometry(300, 300, 300, 300)
self.layout = Qw.QGridLayout(self)
self.menu = Qw.QWidget()
lay = Qw.QVBoxLayout(self.menu)
self.menu.items = []
for n, i in enumerate(self.order_list):
btn = Qw.QCheckBox(i)
btn.setFixedHeight(15)
lay.addWidget(btn)
self.menu.items.append(btn)
self.menu_scroll = Qw.QScrollArea(widgetResizable=True)
self.menu_scroll.setWidget(self.menu)
self.layout.addWidget(self.menu_scroll, 0, 0, 1, 1)
self.layout.setColumnStretch(0, 10)
self.rec = Qw.QWidget()
self.rec.items = []
self.lay2 = Qw.QVBoxLayout(self.rec)
for n, i in enumerate(self.order_list):
btn = Qw.QCheckBox(i)
btn.setFixedHeight(15)
self.lay2.addWidget(btn)
self.rec.items.append(btn)
self.rec_scroll = Qw.QScrollArea(widgetResizable=True)
self.rec_scroll.setWidget(self.rec)
self.layout.addWidget(self.rec_scroll, 0, 0, 1, 1)
self.layout.setColumnStretch(0, 10)
self.layout.addWidget(self.rec_scroll, 0, 1, 1, 1)
self.layout.setColumnStretch(1, 9)
self.order_btn = Qw.QPushButton('Order')
self.order_btn.setFixedSize(80, 30)
self.order_btn.clicked.connect(self.get_ordered)
self.layout.addWidget(self.order_btn, 1, 0, 1, 2, alignment=Qc.Qt.AlignCenter)
@Qc.pyqtSlot()
def get_ordered(self):
try:
while self.rec.items:
self.rec.items.pop(-1).deleteLater()
n = 0
for i in self.menu.items:
if i.checkState():
item = Qw.QLabel()
item.setFixedHeight(15)
item.setText(i.text())
item.show()
self.rec.items.append(item)
self.lay2.addWidget(item)
n += 1
except Exception as error:
print(error)