如何将垂直滚动条添加到 QListWidget()
How can I add a vertical scrollbar to a QListWidget()
我有一个 QListWidget
,其中包含超出其可见边界的 QListWidgetItems
,我想添加一个垂直滚动条。我尝试了以下方法:
sz = QtCore.QSize(200,200)
_lstwdgt = QtGui.QListWidget(parent)
_item = QtGui.QListWidgetItem(_lstwdgt)
_widget = QtGui.QWidget(parent)
_layout = QtGui.QVBoxLayout()
for n in range(0,10):
_btn = QtGui.QPushButton("test {}".format(n), parent)
_layout.addWidget(_btn)
_layout.addStretch()
_layout.setSizeConstraint(QtGui.QLayout.SetFixedSize)
_widget.setLayout(_layout)
_item.setSizeHint(_widget.sizeHint())
_lstwdgt.addItem(_item)
_lstwdgt.setItemWidget(_item,_widget)
_lstwdgt.setFixedSize(sz)
vScrollBar = QtGui.QScrollBar(_lstwdgt)
_lstwdgt.setVerticalScrollBar(vScrollBar)
但是没有垂直滚动条可见。但是,当我将 _layout
更改为 QHBoxLayout()
时,会出现水平滚动条,缺少什么来获得垂直滚动条?
问题是默认情况下每个视图都使用 ScrollPerItem
滚动模式:在这种模式下,滚动条仅用于在项目之间滚动,并且由于您的视图只有一个项目,Qt 没有不认为它必须显示滚动条。
解决方法是将模式改为ScrollPerPixel
:
_lstwdgt.setVerticalScrollMode(QtGui.QListWidget.ScrollPerPixel)
请注意,如果您只需要将小部件添加到可滚动区域,那么使用 QListWidget 确实是一个非常糟糕的主意,应该改用 QScrollArea。
此外,添加拉伸是完全没有意义的,因为您使用的是 sizeHint
的项目,并且尺寸提示仅 returns 最小最优 尺寸(忽略任何拉伸,这是可以缩小到 0 尺寸的垫片)。
我也强烈建议你使用更冗长的变量名,像 _lstwdgt
这样的缩写名称真的没有任何好处(也没有为局部范围内的每个对象添加下划线前缀);我花了更多时间来了解您的代码做了什么,而不是真正找到问题的原因。请记住,可读性在编程中确实很重要。
我有一个 QListWidget
,其中包含超出其可见边界的 QListWidgetItems
,我想添加一个垂直滚动条。我尝试了以下方法:
sz = QtCore.QSize(200,200)
_lstwdgt = QtGui.QListWidget(parent)
_item = QtGui.QListWidgetItem(_lstwdgt)
_widget = QtGui.QWidget(parent)
_layout = QtGui.QVBoxLayout()
for n in range(0,10):
_btn = QtGui.QPushButton("test {}".format(n), parent)
_layout.addWidget(_btn)
_layout.addStretch()
_layout.setSizeConstraint(QtGui.QLayout.SetFixedSize)
_widget.setLayout(_layout)
_item.setSizeHint(_widget.sizeHint())
_lstwdgt.addItem(_item)
_lstwdgt.setItemWidget(_item,_widget)
_lstwdgt.setFixedSize(sz)
vScrollBar = QtGui.QScrollBar(_lstwdgt)
_lstwdgt.setVerticalScrollBar(vScrollBar)
但是没有垂直滚动条可见。但是,当我将 _layout
更改为 QHBoxLayout()
时,会出现水平滚动条,缺少什么来获得垂直滚动条?
问题是默认情况下每个视图都使用 ScrollPerItem
滚动模式:在这种模式下,滚动条仅用于在项目之间滚动,并且由于您的视图只有一个项目,Qt 没有不认为它必须显示滚动条。
解决方法是将模式改为ScrollPerPixel
:
_lstwdgt.setVerticalScrollMode(QtGui.QListWidget.ScrollPerPixel)
请注意,如果您只需要将小部件添加到可滚动区域,那么使用 QListWidget 确实是一个非常糟糕的主意,应该改用 QScrollArea。
此外,添加拉伸是完全没有意义的,因为您使用的是 sizeHint
的项目,并且尺寸提示仅 returns 最小最优 尺寸(忽略任何拉伸,这是可以缩小到 0 尺寸的垫片)。
我也强烈建议你使用更冗长的变量名,像 _lstwdgt
这样的缩写名称真的没有任何好处(也没有为局部范围内的每个对象添加下划线前缀);我花了更多时间来了解您的代码做了什么,而不是真正找到问题的原因。请记住,可读性在编程中确实很重要。