невозможно удалить элемент холста из массива, используя тег объекта (строку) - PullRequest
0 голосов
/ 01 июня 2018

Я не могу удалить элемент холста из массива, используя тег объекта (строку)

from Tkinter import *

if __name__=="__main__":

    root=Tk()
    cv=Canvas(root,bg="yellow",width=200,height=200)
    cv.pack()  

    wCell=100
    N=2
    for col in range(N):
        for row in range(N):
            x=50+col*wCell 
            y=50+row*wCell 

            cc=str(row)+str(col)
            print row,col,cc,type(cc)
            R=50
            coords=[x-R,y-R,x+R,y+R]
            clr="cyan"
            cv.create_oval(coords,fill=clr,tags=(cc,))

        #this part does NOT respond. Why? Please help!
        cv.delete((str(11),))
        cv.update()

    root.mainloop()

Ответы [ 2 ]

0 голосов
/ 01 июня 2018
#this part does NOT respond. Why? Please help!
cv.delete((str(11),))

Приведенный выше код такой же, как и этот:

tag = str((str(11),))
cv.delete(tag)

Когда вы изучите tag, вы увидите, что значением является строка ('11',).Tkinter будет искать элемент canvas буквально с 7-байтовым тегом ('11',).У вас нет элементов на холсте с этим тегом.

Часть проблемы заключается в том, что вы пытаетесь создать объект и присвоить ему тег, представляющий собой комбинацию из двух целых чисел.Это недопустимый тег для элемента Canvas, поскольку tkinter не может отличить тег от идентификатора элемента Canvas, который является целым числом.Тэги Canvas могут быть любой произвольной строкой , за исключением для последовательности, состоящей только из цифр.

В коде, который создает овал, если вы хотите применить пользовательский тег, он не должен быть в виде целого числа.Например, вы можете добавить один символ, чтобы сделать ваш тег правильным.Тогда вам просто нужно использовать тот же тег в вашем коде:

cc="o" + str(row)+str(col)
cv.create_oval(coords, fill=clr, tags=(cc,))
...
cv.delete("o11")
0 голосов
/ 01 июня 2018

из Tk doc:

Каждый элемент также может иметь любое количество тегов, связанных с ним.Тег - это просто строка символов, и он может принимать любую форму, кроме целого числа. Например, 'x123' в порядке, но '123' не ...

...