Область прокрутки - установить виджет / макет? - PullRequest
1 голос
/ 10 апреля 2019

У меня есть определение класса, которое использует 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)

1 Ответ

1 голос
/ 10 апреля 2019

Вы должны создать промежуточный виджет, в котором вы устанавливаете макет, и он может быть помещен в QScrollArea:

widget = QtWidgets.QWidget()
widget.setContentsMargins(0, 0, 0, 0)
widget.setLayout(sub_layout)
scrollarea.setWidget(widget)
...