2016-04-02 38 views
-1

Tkinter tuval üzerine farklı şekiller yerleştirmeye çalışıyorum ve her biri için bir etiket ekleyin ve yapılacak bir eylemi bağlayın.Tkinter - tuvale resim: Farklı etikete birden çok şekle bağlanamaz mı?

Örnek olarak: Bir tuval üzerine 4 nokta koydum, onlara koordinatları ile oluşturulmuş bir etiket iliştiriyorum ve etiketi tarafından tanımlanan bir tıklama noktası koordinatlarını görüntüleyen bir eylem tanımladım.

Etiketi etkilediğimde yazdırıyorsam, etiketler farklıdır, ancak koordinatlar görüntülendiğinde, her zaman son eklenen nokta olur, tüm etiketlerin nihayet aynı olduğu anlaşılıyor. Anlamadım:/

from Tkinter import * 

points=[(10,10),(60,10),(10,60),(60,60)] 

def check(pixel): 
    print('===========') 
    print('you clicked on:') 
    print(pixel) 

root = Tk() 
canvas = Canvas(root, width=70, height=70) 
print('----points list----') 
for p in points: 
    tag="("+str(p[0])+","+str(p[1])+")" 
    print(tag) 
    canvas.create_oval(p[0]-2,p[1]-2,p[0]+2,p[1]+2,tags=tag) 
    canvas.tag_bind(tag, '<ButtonPress-1>', lambda event:check(tag)) 

canvas.pack() 
root.mainloop() 

olası çıkışı:

----points list---- 
(10,10) 
(60,10) 
(10,60) 
(60,60) 
=========== 
you clicked on: 
(60,60) 
=========== 
you clicked on: 
(60,60) 
=========== 
you clicked on: 
(60,60) 

herhangi bir fikir (3 farklı noktalarda tıklanan)?

cevap

1

buldum neden insanlar aynı noktada takılırsanız: Böyle komut tag_bind kullanarak

:

for variable... 
    canvas.tag_bind(item_id, '<ButtonPress-1>', lambda event:function(variable)) 

fonksiyon küresel değişkeni alacak çünkü bir döngü içinde asla işe yaramayacak ' değişken 'SONRAKİ bittiğinde = her zaman son değer. komuta kendisi değişken tanımlamak gerekir: Böyle

for variable... 
    canvas.tag_bind(item_id, '<ButtonPress-1>', lambda event, var=variable:function(var)) 

sizin işlevi her öğe için kendi değişken olduğunu almak ve tüm öğeler için değil bir değişken