2012-03-07 62 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

I unders這就是爲什麼我使用'print str(w.find_withtag('key'))'來證明這些標籤是由'w.find_withtag'收集的。 – 2012-03-07 18:38:35

+0

RE:你的編輯 - Yupe。這樣可行。多麼令人沮喪。你怎麼知道這個標籤是直接處理的,而不是間接的(我嘗試的方式)?謝謝。 – 2012-03-07 18:41:42

+1

@JayGattuso:剛剛閱讀文檔,這是所有... – PearsonArtPhoto 2012-03-07 18:43:15

1

的問題是,w.find_withtag(「鍵」)返回一個元組對象,但w.move預計個別整數ID(或標籤字符串)

你可以這樣做:

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

而在你的情況下,使用簡單的「鑰匙」是更好的,如果你有IDS的任意列表,你就需要循環,雖然它們,而不是將其傳遞in。