为QScrollA设置最小合理宽度

2024-06-17 12:46:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有一个很长的内容列表,我想垂直滚动。 水平尺寸不是问题。我试着用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. 由于垂直滚动条,水平空间现在也不够,所以水平滚动条也显示出来了。

我可以用setHorizontalScrollBarPolicy使水平滚动条消失,但主要问题仍然存在:垂直滚动条模糊了部分标签。在

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


Tags: import区域applicationsys水平空间gui标签
2条回答

您的示例有点不切实际,因为滚动区域被设置为顶层窗口。更典型的是,它将是一个子小部件,它的初始大小将由一个布局决定,并且将间接地受到其他小部件和/或布局的大小的限制。作为一个顶层窗口,约束是不同的,并且部分受窗口管理器的影响(窗口管理器的具体行为可能因平台而异)。在

要确保滚动区域的大小正确,必须根据其内容为其设置最小宽度,并允许垂直滚动条和框架。最好将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_())

尝试在小部件中使用sizeHint(),并使用结果设置QScrollArea的最小宽度。在

这里有一些额外的信息:http://doc.qt.io/qt-5/layout.html

相关问题 更多 >