in der Abbildung unten ist ein QListWidget
zufällig mit vielen QListWIdgetItems
bevölkerte, wordWrap
aktiviert und mit einem scrollBar
auf der rechten Seite (man beachte das ausgewählte Element).PyQt ableiten y Pixelkoordinaten von QListWidgetItems aktuell sichtbaren in einem QListWidget
Was ich bin sind die Y-Positionen von jedem (sichtbar) QListWidgetItem
relativ zu QListWidget.viewport()
.
Inzwischen erreiche ich dies durch an die Zeilenhöhe über den y-Bereich der QListWidget.viewport().geometry()
mit einem Pixelabstand äquivalent Fuß (hier: 29 Pixel), einen itemAt(0,y)
zum QListWidget
Anwendung und die Quelle von Elementen zu einer Liste anhang wenn sie nicht schon drin sind.
Code ist wie:
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]
Auf diese Weise mir nicht sehr elegant scheint, da es langsam ist und redundante Abfragen durchführt.
Gibt es eine klügere Möglichkeit, alle y-Koordinaten zu finden?