【发布时间】:2021-07-16 06:54:51
【问题描述】:
我在QTreeWidget 中有一个QListWidget,我希望它在添加或删除行时自动调整其高度。我让QListWidget 自动调整大小工作,但是当它在QTreeWidget 内时它会中断,QListWidget 的大小会增加,但QTreeWidget 没有正确调整它并且其他行被覆盖。
from PyQt5 import QtCore, QtGui, QtWidgets, sip
from PyQt5.QtCore import Qt
class MyListWidget(QtWidgets.QListWidget):
def sizeHint(self):
width = super().sizeHint().width()
height = sum([self.sizeHintForRow(i) for i in range(self.count())]) + 5
return QtCore.QSize(width, height)
app = QtWidgets.QApplication([])
tree = QtWidgets.QTreeWidget()
item1 = QtWidgets.QTreeWidgetItem(tree, ['item1'])
item2 = QtWidgets.QTreeWidgetItem(tree, ['item2'])
item3 = QtWidgets.QTreeWidgetItem(tree, ['item3'])
list_widget = MyListWidget()
list_widget.addItems(list('abcd'))
tree.setItemWidget(item1, 0, list_widget)
button = QtWidgets.QPushButton("Add row")
button.clicked.connect(lambda: [list_widget.addItem("New row"),
list_widget.adjustSize(),
tree.adjustSize(),
tree.updateGeometry()
])
container = QtWidgets.QWidget()
layout = QtWidgets.QVBoxLayout()
container.setLayout(layout)
layout.addWidget(tree)
layout.addWidget(button)
container.show()
list_widget.show()
app.exec_()
初始输出:
点击新增后的输出:
正如您在第二张图片中看到的,item2 现在被展开的列表小部件覆盖,所需的输出是移动 item2,这样在列表小部件中添加新项目后不会覆盖它下面的项目在同一个树小部件中。
【问题讨论】:
-
由于您的帖子不清楚,您能否展示一下您得到的和想要得到的图像
标签: python pyqt pyqt5 qtreewidget