如何使用PyQt和python在gui的垂直布局中添加滚动条

问题描述 投票:0回答:1

我有一个 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。

然后我尝试简单地在单击加号按钮时添加布局,然后窗口大小增加,我希望保持不变。 enter image description here

我的期望如下图所示。 enter image description here

python pyqt pyqt5 scrollbar pyautogui
1个回答
0
投票

要在 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_())
© www.soinside.com 2019 - 2024. All rights reserved.