这是我的GUI的图片:
我想在列表窗口小部件中显示所有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()
答案 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