2012-03-07 4 views
1

나는 꼬리표를 가진 많은 객체를 가지고 있으며, canvas.find 메소드는 모든 객체의 ID를 예상대로 반환합니다 (하단의 인쇄 호출 참조). canvas.move 명령은 오브젝트를 이동하지 않습니다.Python - Tkinter - 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() 

답변

3

Tkinter Canvas Widget documentation에 따르면, 상기 이동 명령에 전달 된 인수는 find_withtag 태그와 동일하다. 그래서 당신은 단순히 여기에 코드를 변경 할 수 있어야한다 :

w.move('key', 500, -250) 
+0

나 그 이유는'print str (w.find_withtag ('key'))'태그를 사용하여 w.find_withtag에 의해 태그가 수집되고 있음을 증명하는 이유입니다. –

+0

RE : 편집 - 유피. 그거야. 얼마나 초조해. 그 태그가 간접적으로 (내가 시도한 방식대로) 직접적으로 다루어 졌다는 것을 어떻게 알았습니까? 고맙습니다. –

+1

@JayGattuso : 설명서를 읽으세요. 그게 전부예요. – PearsonArtPhoto

1

문제는 그 w.find_withtag ('키') 튜플 개체를 반환하지만, 개별 정수 ID (또는 태그를 w.move 기대 문자열)

당신은 할 수 있습니다 : 당신이 ID의 임의의 목록이 있다면

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

간단한 '키'를 사용, 귀하의 경우 상태가 더 나은, 당신은 루프에 필요하다고 생각 대신에 그것을 통과하는 것 in.