2012-03-07 18 views
1

私はタグを持つオブジェクトをたくさん持っていますが、canvas.findメソッドはすべてのオブジェクトのIDを期待通りに返しますが(下部にあるprint呼び出しを参照)、 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

アンダーこれは、 'w.find_withtag'によってタグが収集されていることを示すために' print str(w.find_withtag( 'key')) 'を使った理由です。 –

+0

RE:あなたの編集 - Yupe。それは動作します。どのようにイライラする。そのタグが間接的ではなく(私が試みたやり方ではなく)直接的に扱われていることをどうお知りになりましたか?ありがとうございました。 –

+1

@JayGattuso:ドキュメントを読むだけで、それはすべてです... – PearsonArtPhoto

1

問題がw.find_withtag(「キー」)はタプルオブジェクトを返しますが、個々の整数のID(またはタグをw.move期待していることですあなたが行うことができ、文字列)

:あなたはIDの任意のリストを持っていた場合

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

をあなたのケースでは、単純な「キー」を使用して優れている一方では、あなたの代わりにそれを渡すのでそれらけれどもループする必要がありますインチ

関連する問題