У меня есть определение класса, в котором используется QVBoxLayout (main_layout), где у меня есть несколько кнопок.
Под этим у меня в настоящее время есть тонна групповых ящиков
Я хотел бы поместить эти элементы (после кнопок) внутри QScrollArea, чтобы кнопки оставались «заблокированными» в моем пользовательском интерфейсе, а другие виджеты можно было прокручивать.
У меня проблема в том, что QScrollArea имеет только функцию setWidget — как мне передать ей все эти другие виджеты? Я не хочу помещать их в другой класс вообще
Например, QScrollArea.setLayout() был бы полезен здесь!
Я попытался поместить все эти виджеты в новый sub_layout QVBoxLayout , мне просто нужен виджет прокрутки, управляющий им.
Есть предположения ?
main_layout = qw.QVBoxLayout()
self.layout().addLayout(main_layout)
#do it button added to main layout not scroll area
self.run_button = customButton("place between components",parent=self)
self.run_button.setFixedWidth(315)
self.run_button.setFixedHeight(30)
main_layout.addWidget(self.run_button)
#make the scroll area
scrollArea = qw.QScrollArea()
subWidget = qw.QWidget()
subWidget.setContentsMargins(0,0,0,0)
sub_layout = qw.QVBoxLayout()
subWidget.setLayout(sub_layout)
scrollArea.setWidget(subWidget)
#add it to the main layout
main_layout.addWidget(scrollArea)
#all my extra layouts and widgets for options are declared
#pins v layout
pins_main_v_layout = qw.QVBoxLayout()
pins_main_v_layout.setSpacing(4)
pins_main_v_layout.setContentsMargins(2,2,2,2)
#stitching v layout
stitching_main_v_layout = qw.QVBoxLayout()
stitching_main_v_layout.setContentsMargins(2,2,2,2)
#cable v layout
cable_main_v_layout = qw.QVBoxLayout()
cable_main_v_layout.setContentsMargins(2,2,2,2)
#add the options layouts to the scroll area sub widget
sub_layout.addLayout(pins_main_v_layout)
sub_layout.addLayout(stitching_main_v_layout)
sub_layout.addLayout(cable_main_v_layout)
# all the options and further layouts, widgets declared from here
# i include one example below
#PINS
#define the contents pins layout
#main pins box
pins_vbox_group_layout = qw.QVBoxLayout()
pins_vbox_group_layout.setSpacing(4)
self.pins_group_box = qw.QGroupBox('pins')
self.pins_group_box.setAlignment(qc.Qt.AlignHCenter)
self.pins_group_box.setCheckable(True)
pins_main_v_layout.addWidget(self.pins_group_box)
self.pins_group_box.setLayout(pins_vbox_group_layout)
Вам нужно создать промежуточный виджет, в котором вы устанавливаете макет, и его можно поместить в QScrollArea:
widget = QtWidgets.QWidget()
widget.setContentsMargins(0, 0, 0, 0)
widget.setLayout(sub_layout)
scrollarea.setWidget(widget)
@blam я изменил код, чтобы использовать имя вашей переменной
Спасибо - это помогло. У меня по-прежнему возникают проблемы с добавлением моих виджетов и макетов в sub_layout и их отображением — в Maya не сообщается об ошибках. Я использую sub_layout.addLayout(myOptionsLayoutA), но он не отображается внутри макета прокрутки. Раньше это был main_layout.addLayout(myOptionsLayoutA). Я убедился, что область прокрутки также добавлена в main_layout. Например, текущий стек: main_layout>scrollarea (с виджетом) >>widget (с макетом sub_layout) >> sub_layout содержит мои элементы управления, виджеты и макеты.
Я понимаю, что ввод моего псевдокода бесполезен, он просто показывает, что я добавил виджет прокрутки обратно в основной макет.
@blam Без минимальный воспроизводимый пример я не могу вам помочь
Не беспокойтесь, я через секунду скопирую пасту со своего компьютера, а не с мобильного!
Я вставил текущий фрагмент кода в качестве «ответа», так как не мог понять, как включить фрагмент кода в комментарий — это нормально?
@blam Нет, этот раздел предназначен для ответа, код должен быть размещен как редакция вашего вопроса.
спасибо - удалили мой ответ и добавили его к исходному вопросу в качестве редактирования
@blam меняем только scrollArea = qw.QScrollArea()
на scrollArea = qw.QScrollArea(widgetResizable=True)
удивительно - это здорово сейчас. Спасибо ! Я мог бы использовать setFixedWidthHeight в макете виджета/подпрограммы, верно?
@blam Я полагаю, да, попробуйте, если это сработает, это лучший способ узнать, работает ли что-то. Если мой ответ вам поможет, не забудьте отметить его как правильный :-)
Спасибо. Будут ли все мои последующие виджеты и макеты добавлены в этот новый «sub_layout» вместо этого?