python - 设置 QScrollArea 的最小合理宽度

标签 python qt pyside qscrollarea

我对 Qt 比较陌生,我通过 PySide 访问 Qt。

我有一个较长的内容列表,我想使其可垂直滚动。 水平尺寸不是问题。我尝试使用 QScrollArea 来实现这一点。这是一个最小的例子:

import sys

import PySide.QtGui as gui

application = gui.QApplication(sys.argv)

window = gui.QScrollArea()
list = gui.QWidget()
layout = gui.QVBoxLayout(list)

for i in range(100):
    layout.addWidget(gui.QLabel(
        "A something longish, slightly convoluted example text."))

window.setWidget(list)

window.show()

sys.exit(application.exec_())

发生了什么:

  1. 滚动区域将其水平尺寸设置为标签所需的尺寸

  2. 它注意到垂直空间不足,因此添加了垂直滚动条。

  3. 由于垂直滚动条,现在水平空间也不够了,所以也显示了水平滚动条。

我可以使用setHorizo​​ntalScrollBarPolicy使水平滚动条消失,但主要问题仍然存在:垂直滚动条遮盖了部分标签。

如何将滚动区域的宽度设置为不需要水平滚动条的最小值?

最佳答案

您的示例有些不切实际,因为滚动区域已成为顶级窗口。更典型地,它将是子窗口小部件,并且其初始大小将由布局确定,并且将间接受到其他窗口小部件和/或布局的大小的约束。作为顶级窗口,约束是不同的,并且部分受到窗口管理器的影响(其确切行为可能因平台而异)。

为了确保滚动区域具有正确的大小,您必须根据其内容设置最小宽度,并且还允许垂直滚动条和框架。最好设置 widgetResizable属性设置为 True 并将可扩展的间隔符添加到内容布局的末尾。

在下面的示例中,我更改了标签的背景颜色,以便更容易看到发生的情况。我还允许通过在显示后重置最小宽度来将窗口大小调整为小于其初始大小 - 但这是可选的。

import sys

import PySide.QtGui as gui

application = gui.QApplication(sys.argv)

window = gui.QScrollArea()
window.setWidgetResizable(True)
list = gui.QWidget()
layout = gui.QVBoxLayout(list)

# just for testing
window.setStyleSheet('QLabel {background-color: red}')

for i in range(30):
    layout.addWidget(gui.QLabel(
        "A something longish, slightly convoluted example text."))

layout.addStretch()

window.setWidget(list)

window.setMinimumWidth(
    list.sizeHint().width() +
    2 * window.frameWidth() +
    window.verticalScrollBar().sizeHint().width())

window.show()

# allow resizing smaller
window.setMinimumWidth(1)

sys.exit(application.exec_())

关于python - 设置 QScrollArea 的最小合理宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47282960/

相关文章:

c++ - vtkRenderWindowInteractor 事件循环和线程

c++ - 查看QCursor::setPos是否有效果

python - Jenkins Python 打印控制台输出

python - 调试时如何跳过抛出异常的行

python - 如何在python函数中删除一个对象?

c++ - Hello World Qt 创建者

python - 如何读取python文本文件中的数字?

python - 使用 pyside/pyqt 更改 QPixmap 的饱和度

python - 如何使用QtWebkit加载本地静态html文件

python - 无法在 Qt 应用程序内重绘 matplot