2024-06-11 11:50:18 发布
网友
我正在制作一个树形小部件,在这里我只想在滚动时获取可见区域中的所有项目(不是树形小部件中的所有项目),如下图所示:
在您看到的第一张图像中,我希望获得可见区域中的所有项目。在第二幅图中,我改变了滚动条,可见区域中的项目也改变了。所以我想在滚动时按可见区域获取所有项目
一种相当有效的方法是使用indexAt获取视口顶部和底部的索引,然后根据行号创建一个范围:
def visibleRange(self): top = QtCore.QPoint(0, 0) bottom = self.tree.viewport().rect().bottomLeft() return range(self.tree.indexAt(top).row(), self.tree.indexAt(bottom).row() + 1)
然后,您可以对其进行迭代,从每一行中提取所需的任何信息。以下是完整的演示脚本:
import sys from PyQt5 import QtCore, QtWidgets class Window(QtWidgets.QWidget): def __init__(self): super().__init__() self.button = QtWidgets.QPushButton('Test') self.button.clicked.connect(self.handleButton) self.tree = QtWidgets.QTreeWidget() layout = QtWidgets.QVBoxLayout(self) layout.addWidget(self.tree) layout.addWidget(self.button) columns = 'ABCDE' self.tree.setColumnCount(len(columns)) for index in range(100): QtWidgets.QTreeWidgetItem( self.tree, [f'{char}{index:02}' for char in columns]) def visibleRange(self): top = QtCore.QPoint(0, 0) bottom = self.tree.viewport().rect().bottomLeft() return range(self.tree.indexAt(top).row(), self.tree.indexAt(bottom).row() + 1) def handleButton(self): for row in self.visibleRange(): item = self.tree.topLevelItem(row) print(item.text(0)) if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) window = Window() window.setWindowTitle('Test') window.setGeometry(800, 100, 540, 300) window.show() sys.exit(app.exec_())
一种相当有效的方法是使用indexAt获取视口顶部和底部的索引,然后根据行号创建一个范围:
然后,您可以对其进行迭代,从每一行中提取所需的任何信息。以下是完整的演示脚本:
相关问题 更多 >
编程相关推荐