滚动区域 - 设置小部件/布局?
Scroll Area - set widget / layout?
我有一个 class 定义,它使用 QVBoxLayout ( main_layout),其中有几个按钮。
下面我目前有大量的组框
我想将这些项目(在按钮之后)放在 QScrollArea 中,这样按钮在我的 UI 处保持“锁定”状态,并且可以滚动其他小部件
我遇到的问题是 QScrollArea 只有一个“setWidget”函数——我如何将所有其他小部件传递给它?我不想把它们放在不同的 class 中
例如 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)
我有一个 class 定义,它使用 QVBoxLayout ( main_layout),其中有几个按钮。
下面我目前有大量的组框
我想将这些项目(在按钮之后)放在 QScrollArea 中,这样按钮在我的 UI 处保持“锁定”状态,并且可以滚动其他小部件
我遇到的问题是 QScrollArea 只有一个“setWidget”函数——我如何将所有其他小部件传递给它?我不想把它们放在不同的 class 中
例如 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)