pyqtgraph: для элемента в .items выводит только каждый второй элемент - PullRequest
0 голосов
/ 15 апреля 2020

Я мог бы воспроизвести мою проблему в примере с pyqtgraph GLLinPlotItem.py. Я только добавил строки

print (w.items)     

for item in w.items:
    if (type (item) == gl.GLLinePlotItem): 
        print (item)
        w.removeItem (item)

после для l oop, который загружает график с помощью GLLinePlotItems.

пока print (w.items) печатает все элементы my for l oop, печатает и удаляет только каждую секунду.

Я нашел эту тему: Python только для циклов каждую секунду Item , но нет решения.

Есть идеи?

Большое спасибо

Martin

Редактировать: если вы прокомментируете w. removeItem это печатает все пункты.

1 Ответ

0 голосов
/ 15 апреля 2020

Хорошо, я нашел себя: removeItem изменяет список, перемещая каждый последующий элемент на один индекс вперед, в то время как индекс l oop остается прежним. Так что внутри циклы in только l oop через индекс. Я думал, что они принимают во внимание, когда список меняется. узнал что-то новое снова :-) Итак, мое решение просматривает список сзади, поэтому удаление элемента не влияет на индекс, потому что он рассчитывает спереди:

itm_cnt = len (w.items)
idx = itm_cnt - 1
print (itm_cnt)    
while (idx >= 0):
    if (type (w.items [idx]) == gl.GLLinePlotItem): 
        print (idx, w.items [idx])
#        w.removeItem (w.items [idx])
        del w.items [idx]
    idx -= 1

Надеюсь, это поможет кому-то еще , Martin

...