Python - Tkinter - canvas.move не работает - PullRequest
1 голос
/ 07 марта 2012

У меня есть куча объектов, у которых есть тег, и хотя метод canvas.find возвращает идентификаторы для всего объекта, как и ожидалось (см. Вызов print внизу), команда canvas.move не перемещаетсяобъекты.

Я создаю тестовый скрипт, который работает так, как я ожидаю, поэтому я знаю, что метод теоретически обоснован.

Что я делаю не так?

from Tkinter import * 
master = Tk()
w = Canvas(master, width=1000, height=1000)
w.config(bg='white')
box=25
startX=100
startY=800
rows = 5
columns = 6
coords=[[[],[],[],[],[]],[[],[],[],[],[]],[[],[],[],[],[]],[[],[],[],[],[]],[[],[],[],[],[]],[[],[],[],[],[]]]
widths=[[2,2,2,2,2,2],[2,2,2,2,2,2],[2,2,2,2,2,2],[2,2,2,2,2,2],[2,2,2,2,2,2]]
tagsList = [["a","a","a","a","a","a"],["a","a","a","a","a","a"],["a","a","a","a","a","a"],["a","a","a","a","a","a"],["a","a","a","a","a","a"]]
for j in range(1, 7):
 for i in range(1, 6):
  coords[j-1][i-1]=[(startX)+(box*(j-1)),(startY)+(box*(i-1)),(startX)+(box*j),(startY)+(box*i)]
colours=[["white","#660000","#863030","#ba4a4a","#de7e7e","#ffaaaa"],["white","#a34b00","#d46200","#ff7a04","#ff9b42","#fec28d"],["white","#dfd248","#fff224","#eefd5d","#f5ff92","#f9ffbf"],["white","#006600","#308630","#4aba4a","#7ede7e","#aaffaa"],["white","white","white","white","white","white"]]
w.create_text(startX+(box*columns)/2, startY-(box/1.2), text="Key:", justify = "center", font=("Helvetica", 20),tag="key")
w.create_text((startX-(box*1.5)),(startY+(box*(rows-1)/2)), text="No. \nDroids", justify = "center", font=("Helvetica", 16),tag="key")
w.create_text((startX+(box*columns)/2,(startY+box*(rows))+(box/1.5)), text="No. Sigs", justify = "center", font=("Helvetica", 16),tag="key")
w.create_text((startX+(box*(columns-4))-box/2,(startY+box*(rows-1))+(box/1.9)), text="5", justify = "center", font=("Helvetica", 16),tags=("key", "b")) #5
w.create_text((startX+(box*(columns-3))-box/2,(startY+box*(rows-1))+(box/1.9)), text="4", justify = "center", font=("Helvetica", 16),tags=("key", "b")) #4
w.create_text((startX+(box*(columns-2))-box/2,(startY+box*(rows-1))+(box/1.9)), text="3", justify = "center", font=("Helvetica", 16),tags=("key", "b")) #3
w.create_text((startX+(box*(columns-1))-box/2,(startY+box*(rows-1))+(box/1.9)), text="2", justify = "center", font=("Helvetica", 16),tags=("key", "b")) #2
w.create_text((startX+(box*(columns))-box/2,(startY+box*(rows-1))+(box/1.9)), text="1", justify = "center",font=("Helvetica", 16),tags=("key", "b")) #1
w.create_text((startX+box/2,(startY+box*(rows-5))+(box/2)), text="1", justify = "center", font=("Helvetica", 16),tags=("key", "b")) #1
w.create_text((startX+box/2,(startY+box*(rows-4))+(box/2)), text="2", justify = "center", font=("Helvetica", 16),tags=("key", "b")) #2
w.create_text((startX+box/2,(startY+box*(rows-3))+(box/2)), text="3", justify = "center", font=("Helvetica", 16),tags=("key", "b")) #3
w.create_text((startX+box/2,(startY+box*(rows-2))+(box/2)), text="4", justify = "center", font=("Helvetica", 16),tags=("key", "b")) #4
for i in range(0, 5):
 for j in range(0, 6):
  w.create_rectangle(*coords[j][i],width=widths[i][j],tags=(tagsList[i][j],"key"),fill=colours[i][j])   
w.tag_raise("b")
w.move(w.find_withtag('key'), 500, -250)
w.pack()
print str(w.find_withtag('key')) 
w.update()
mainloop()

Ответы [ 2 ]

3 голосов
/ 07 марта 2012

Согласно документации Tkinter Canvas Widget , аргумент, передаваемый в команду перемещения, совпадает с тегом find_withtag . Таким образом, вы можете просто изменить код так:

w.move('key', 500, -250)
1 голос
/ 10 августа 2012

Проблема в том, что w.find_withtag ('key') возвращает объект кортежа, но w.move ожидает индивидуальный целочисленный идентификатор (или строку тега)

Вы можете сделать:

for id in w.find_withtag('key'):
    w.move(id, 500, -250)

Хотя в вашем случае лучше использовать простой «ключ», если бы у вас был произвольный список идентификаторов, вам нужно было бы зацикливать их вместо того, чтобы передавать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...