QListWidget显示更多项目

时间:2019-12-20 17:00:29

标签: python pyqt pyqt5 qlistwidget

这是我的GUI的图片:

enter image description here

我想在列表窗口小部件中显示所有100个项目,而没有内部滚动条(有一个外部滚动条,所以没有问题,我不能容纳所有项目)。

我尝试禁用列表小部件的滚动条,但这并没有增加列表小部件显示的项目数。

这是我的代码:

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

if __name__ == "__main__":
    app = QApplication(sys.argv)

    dlg = QDialog()

    listWidget = QListWidget()
    for i in range(100):
        listWidget.addItem(QListWidgetItem("Item " + str(i)))

    layout1 = QVBoxLayout()
    layout1.addWidget(QLabel("Label 1"))
    groupBox1 = QGroupBox("Group 1")
    groupBox1.setLayout(layout1)

    layout2 = QVBoxLayout()
    layout2.addWidget(listWidget)
    groupBox2 = QGroupBox("Group 2")
    groupBox2.setLayout(layout2)

    nestedWidgetLayout = QVBoxLayout()
    nestedWidgetLayout.addWidget(groupBox1)
    nestedWidgetLayout.addWidget(groupBox2)
    nestedWidget = QWidget()
    nestedWidget.setLayout(nestedWidgetLayout)

    scrollArea = QScrollArea()
    scrollArea.setWidget(nestedWidget)

    mainLayout = QVBoxLayout()
    mainLayout.addWidget(scrollArea)
    dlg.setLayout(mainLayout)

    dlg.show()

    app.exec()

2 个答案:

答案 0 :(得分:2)

@a_manthey_67解决方案为我们提供了一个起点,但有一些限制:

  • 它是针对特定数量的项目计算的,因此,如果添加/删除项目,它将失败。
  • 手动设置每个项目的高度,而不是获取样式设置的高度。

考虑到上述情况,除了启用sizeHintForRow()的{​​{1}}属性并禁用verticalScrollBar之外,我还使用widgetResizable实现了类似的逻辑。

QScrollArea

答案 1 :(得分:1)

如果listwidget的高度大于所有所有项目的高度,则所有项目均显示在listWidget中,但不显示(listWidget的)滚动条。在此代码段中,项目高度由item.sizeHint()设置,所需的listwidget高度计算出比所有项目所需的高度大10像素。 sizeHint()需要QSize作为参数。

listWidget = QListWidget()
lineHeight = 20        
items = 100
for i in range(items):
    item = QListWidgetItem("Item " + str(i)) # get every item to set sizeHint()
    item.setSizeHint(QSize(-1,  lineHeight)) # -1 = width undefined
    listWidget.addItem(item)                 
listWidget.setFixedHeight(items*lineHeight + 10)  # set fixed height of listwidget
相关问题