我有一个 GUI 窗口,其中有两个选项卡。我根据需要并行添加了两个垂直布局,在左侧垂直布局上,我希望在顶部有一个水平布局,然后是一个垂直布局,如果按下加号按钮,则该垂直布局包含任意数量的水平布局。在底部,我再次想要一个水平布局。
所以,我的问题是,当我在左侧垂直布局的中间垂直布局中附加水平布局时,窗口的大小会增加。但是,我想在布局中添加滚动条。我已经尝试过下面的代码。
central_widget = QtWidgets.QWidget()
scroll_area = QtWidgets.QScrollArea(central_widget)
scroll_area.setGeometry(360, 10, 420, 180)
scroll_area.setWidgetResizable(True)
container = QtWidgets.QWidget()
self.add_layout = QVBoxLayout(self.tab1)
self.add_layout.setContentsMargins(10, 10, 0, 0)
scroll_area.setWidget(self.tab1)
self.left_side.addLayout(self.add_layout)
但它会从窗口中删除 tab1。
要在 PyQt5 中向布局添加滚动条,您应该将布局设置为 QScrollArea 的小部件,并确保 QScrollArea 的 widgetResizing 属性设置为 True。
import sys
from PyQt5 import QtWidgets
class MyWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
central_widget = QtWidgets.QWidget()
self.setCentralWidget(central_widget)
main_layout = QtWidgets.QHBoxLayout(central_widget)
# Left vertical layout
self.left_side = QtWidgets.QVBoxLayout()
main_layout.addLayout(self.left_side)
# Top horizontal layout
top_layout = QtWidgets.QHBoxLayout()
self.left_side.addLayout(top_layout)
top_layout.addWidget(QtWidgets.QPushButton("Button"))
# Scrollable area with vertical layout
self.scroll_area = QtWidgets.QScrollArea()
self.scroll_area.setWidgetResizable(True)
middle_widget = QtWidgets.QWidget()
self.middle_layout = QtWidgets.QVBoxLayout(middle_widget)
self.scroll_area.setWidget(middle_widget)
self.left_side.addWidget(self.scroll_area)
# Bottom horizontal layout
bottom_layout = QtWidgets.QHBoxLayout()
self.left_side.addLayout(bottom_layout)
bottom_layout.addWidget(QtWidgets.QPushButton("Button"))
# Add button to append horizontal layout
self.add_button = QtWidgets.QPushButton("Add Horizontal Layout")
self.add_button.clicked.connect(self.add_horizontal_layout)
bottom_layout.addWidget(self.add_button)
def add_horizontal_layout(self):
# Create a new horizontal layout and add it to the middle vertical layout
new_horizontal_layout = QtWidgets.QHBoxLayout()
for i in range(5):
new_horizontal_layout.addWidget(QtWidgets.QPushButton(f"Button {i}"))
self.middle_layout.addLayout(new_horizontal_layout)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())