gpt4 book ai didi

python - PyQt 导出当前在 QListWidget 中可见的 QListWidgetItems 的 y 像素坐标

转载 作者:太空宇宙 更新时间:2023-11-04 05:20:35 24 4
gpt4 key购买 nike

在下面的屏幕截图中,QListWidget 随机填充了许多 QListWIdgetItems,启用了 wordWrap,并带有 scrollBar 在右侧(注意所选项目)。

我所追求的是每个(可见的)QListWidgetItem 相对于 QListWidget.viewport() 的 y 位置。

到目前为止,我通过以等于行高(此处:29 像素)的像素距离遍历 QListWidget.viewport().geometry() 的 y 范围来实现此目的,将 itemAt(0,y) 应用于 QListWidget 并将字体项附加到列表中(如果列表中尚未准备好的话)。

代码如下:

def reportItems(self):
l = self.listWidget
dy = l.item(0).font().pointSize()
ystart = l.viewport().geometry().y()
h = l.viewport().geometry().height()
print ystart, h, dy
itlist = []
itcomplist = []
for y in range(ystart, ystart+h, (29/8)*dy): #empirical value
i = l.itemAt(0, y)
if not i in itlist:
itlist.append(i)
itcomplist.append((y, l.row(i)))
for it in itcomplist:
y, i = it
print y, l.item(i).text()[:30]

这种方式对我来说似乎不是很优雅,因为它很慢并且执行冗余查询。

有没有更聪明的方法来找到所有的 y 坐标?

enter image description here

最佳答案

您可以获得模型索引列表,然后遍历它们并调用 QListWidget.visualRect获取项目/索引在本地视口(viewport)坐标中的位置

for row in range(listwidget.count()):
index = listwidget.model().index(row)
rect = listwidget.visualRect(index)
print rect.y()

关于python - PyQt 导出当前在 QListWidget 中可见的 QListWidgetItems 的 y 像素坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40509648/

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