gpt4 book ai didi

python - QListWidget显示更多项目

转载 作者:行者123 更新时间:2023-11-30 21:54:03 26 4
gpt4 key购买 nike

这是我的 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()

最佳答案

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

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

考虑到上述情况,除了启用 QScrollAreawidgetResizes 属性和禁用verticalScrollBar。

import sys

from PyQt5.QtCore import pyqtSlot, Qt
from PyQt5.QtWidgets import (
QApplication,
QDialog,
QGroupBox,
QLabel,
QListWidget,
QListWidgetItem,
QScrollArea,
QVBoxLayout,
QWidget,
)


class ListWidget(QListWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.model().rowsInserted.connect(self._recalcultate_height)
self.model().rowsRemoved.connect(self._recalcultate_height)

@pyqtSlot()
def _recalcultate_height(self):
h = sum([self.sizeHintForRow(i) for i in range(self.count())])
self.setFixedHeight(h)


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

dlg = QDialog()

listWidget = ListWidget()
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)

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

scrollArea = QScrollArea(widgetResizable=True)
scrollArea.setWidget(nestedWidget)

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

dlg.show()

sys.exit(app.exec_())

关于python - QListWidget显示更多项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59428906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com