gpt4 book ai didi

python - 使用 QScrollArea 折叠子小部件

转载 作者:行者123 更新时间:2023-12-04 08:06:14 29 4
gpt4 key购买 nike

我正在尝试使用 QVBoxLayout 中的多个 Groupbox 对象创建一个动态 GUI。由于它们很多,我将需要一个滚动区域来使最终用户可以使用它们。
所以我尝试将这个选项卡的顶部小部件从 QWidget 更改为 QScrollArea。
改动前:
Before modification
这是我想要的那种结果,但由于窗口太高而带有滚动条。
更改为 QScrollArea 后:After the modification
我的 GroupBoxs 现在“折叠”并且没有滚动条。我尝试设置它们的大小,但它不够用,因为它们不是固定的。我搜索了文档并尝试使用 WidgetResizable 或者我尝试设置固定高度或 sizehint 但没有任何效果。
创建 Groupbox 后,我的 QScrollArea 的 sizeHint 已经很低(大约 150px 的高度),所以我想我缺少一个参数。
提供代码会很复杂,因为它很复杂。如有必要,我可以以更简单的方式重现问题。
如何重现:

from PyQt5 import QtWidgets, QtGui, QtCore
from PyQt5.QtWidgets import *
import sys

class Example(QMainWindow):

def __init__(self):
super().__init__()

self.initUI()


def initUI(self):

v_layout = QVBoxLayout()
scroll_area = QScrollArea()
self.layout().addWidget(scroll_area)
scroll_area.setLayout(v_layout)
# v_layout.setSizeConstraint(QLayout.SetMinimumSize)

for i in range(50):
box = QGroupBox()
grid = QGridLayout()
box.setLayout(grid)
grid.addWidget(QLabel("totototo"), 0, 0)
grid.addWidget(QLineEdit(), 1, 0)
grid.addWidget(QPushButton(), 2, 0)
v_layout.addWidget(box)
self.show()



app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
取消注释 # v_layout.setSizeConstraint(QLayout.SetMinimumSize)允许组框的内容部署和修复问题的第一部分。但是仍然没有滚动条。

最佳答案

你有2个错误:

  • 不应将小部件添加到 QMainWindow 的布局中,但应使用 setCentralWidget 方法。
  • 您不应将布局添加到 QScrollArea 中,而应使用小部件作为其他小部件的容器,同样,如果您使用布局,则必须激活 widgetResizable 属性。

  • 综上所述,解决方法是:
    def initUI(self):

    scroll_area = QScrollArea(widgetResizable=True)
    self.setCentralWidget(scroll_area)

    container = QWidget()
    scroll_area.setWidget(container)

    v_layout = QVBoxLayout(container)

    for i in range(50):
    box = QGroupBox()
    grid = QGridLayout()
    box.setLayout(grid)
    grid.addWidget(QLabel("totototo"), 0, 0)
    grid.addWidget(QLineEdit(), 1, 0)
    grid.addWidget(QPushButton(), 2, 0)
    v_layout.addWidget(box)

    self.show()

    关于python - 使用 QScrollArea 折叠子小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66210184/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com