Mam problem z działaniem poniższego programu:
import tkinter
from PIL import Image, ImageTk
class Przycisk:
def __init__(self, okno_canvas, wysokosc, szerokosc, obraz):
self.okno_canvas = okno_canvas
self.wysokosc = wysokosc
self.szerokosc = szerokosc
self.obraz = obraz
self.plik_obrazu = ImageTk.PhotoImage(Image.open(f'{sciezka_obrazow}{self.obraz}'))
self.plik_obrazu_canvas = self.okno_canvas.create_image(self.wysokosc, self.szerokosc, image=self.plik_obrazu, anchor ="nw")
def print_test(test):
print(test.obraz)
wspolrzedne = [[160,105,43,13],
[160,90,13,13],[175,90,13,13],[190,90,13,13],
[160,75,13,13],[175,75,13,13],[190,75,13,13],
[160,60,13,13],[175,60,13,13],[190,60,13,13],
[205,90,13,28],[205,75,13,13],[205,60,13,13],
]
sciezka_obrazow = "C:/Users/Komar/PYTHON/KASA/image/"
mnoznik = 4
root = tkinter.Tk()
root.geometry("1200x700")
canvas = tkinter.Canvas(root, width = 1200, height = 700)
canvas.pack()
for i in range (0,13):
globals()["klawisz_" + str(i)] = Przycisk(canvas, wspolrzedne[i][0]*mnoznik, wspolrzedne[i][1]*mnoznik, str(i)+".png")
pomoc = globals()["klawisz_" + str(i)]
canvas.tag_bind(globals()["klawisz_" + str(i)].plik_obrazu_canvas, "<Button-1>", lambda event: print_test(pomoc))
root.mainloop()
Program tworzy przyciski (klawiaturę) z plików png. Do testów stworzyłem funkcję "print_test(test)", która miała wypisać w konsoli nazwę pliku naciśniętego przycisku. I tu pojawia się problem, bo niezależnie jaki nacisnę przycisk w konsoli pojawia się "12.png" - ostatni element z "pętli"
Gdy usunę z pętli linijkę:
canvas.tag_bind(globals()["klawisz_" + str(i)].plik_obrazu_canvas, "<Button-1>", lambda event: print_test(pomoc))
i po pętli dodam:
canvas.tag_bind(globals()["klawisz_" + str(0)].plik_obrazu_canvas, "<Button-1>", lambda event: print_test(globals()["klawisz_" + str(0)]))
canvas.tag_bind(globals()["klawisz_" + str(1)].plik_obrazu_canvas, "<Button-1>", lambda event: print_test(globals()["klawisz_" + str(1)]))
canvas.tag_bind(globals()["klawisz_" + str(2)].plik_obrazu_canvas, "<Button-1>", lambda event: print_test(globals()["klawisz_" + str(2)]))
canvas.tag_bind(globals()["klawisz_" + str(3)].plik_obrazu_canvas, "<Button-1>", lambda event: print_test(globals()["klawisz_" + str(3)]))
....
Wszystko działa tak jakbym tego chciał. W czym może tkwić problem?