【发布时间】:2017-03-23 10:06:53
【问题描述】:
在下面的屏幕截图中,QListWidget 随机填充了许多 QListWIdgetItems、wordWrap 启用,并在右侧有一个 scrollBar(注意所选项目)。
我所追求的是每个(可见)QListWidgetItem 相对于QListWidget.viewport() 的 y 位置。
到目前为止,我通过在QListWidget.viewport().geometry() 的 y 范围内以与行高相等的像素距离(此处:29 像素)行走来实现这一点,将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 坐标?
【问题讨论】:
标签: python qt pyqt qlistwidget qlistwidgetitem