我对 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_())
发生了什么:
滚动区域将其水平尺寸设置为标签所需的尺寸
它注意到垂直空间不足,因此添加了垂直滚动条。
由于垂直滚动条,现在水平空间也不够了,所以也显示了水平滚动条。
我可以使用setHorizontalScrollBarPolicy
使水平滚动条消失,但主要问题仍然存在:垂直滚动条遮盖了部分标签。
如何将滚动区域的宽度设置为不需要水平滚动条的最小值?
最佳答案
您的示例有些不切实际,因为滚动区域已成为顶级窗口。更典型地,它将是子窗口小部件,并且其初始大小将由布局确定,并且将间接受到其他窗口小部件和/或布局的大小的约束。作为顶级窗口,约束是不同的,并且部分受到窗口管理器的影响(其确切行为可能因平台而异)。
为了确保滚动区域具有正确的大小,您必须根据其内容设置最小宽度,并且还允许垂直滚动条和框架。最好设置 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/