@Roma3234343

Tkiner .bind как передать объект, чтобы при наведении мышью он выводил свой id?

У меня не получается правильно передать данные об объекте на который я навожу мышь. Я составил код и максимально упростил его, чтобы осталась только эта проблема. Суть в том что я запускаю цикл, который при движении мыши вызывает функцию, которая перебирает словарь с объектами и если я навожу на один из них, то он передается в другую функцию. И не ругайтесь на глобальные переменные (т.к. я создал в основной программе 2 подкласса tkinter "Tk" и "Toplevel", я не нашел другого варианта как параллельно наследовать переменные подклассов) Запустите код и нажмите 2 и более раз на объект и посмотрите в консоль. Эту проблему я уже не могу решить более 5 часов, так что кому не сложно помогите пожалуйста...
from tkinter import *

current_k = 0
id_k_new = 0
id_k_last = 0
items_k = {}

class Window(Tk):
    def __init__(self):
        super().__init__()
        self.geometry("500x500+200+0")
        self.resizable(0, 0)

        self.canvas = Canvas(self, width=573, height=561, highlightthickness=0)
        self.canvas.place(x=0, y=0)
        self.button = Button(self.canvas, text="click me", command=self.print_rectangle)
        self.button.place(x=400, y=100)
        self.bind('<Motion>', self.mouse_wheel_knop)

    def mouse_wheel_knop(self, event):
        global id_k_last
        global items_k
        global id_k_new
        global current_k
        for i in range(id_k_last):
            current_k = i + 1
            items_k["knop{}".format(i + 1)].bind("<Enter>", self.fun_nag)

    def print_rectangle(self):
        global items_k
        global id_k_new
        global id_k_last
        id_k_new += 1
        for i in range(id_k_last, id_k_new):
            items_k["knop{}".format(i + 1)] = Canvas(self.canvas, width=150, height=30, highlightthickness=0)
            items_k["knop{}".format(i + 1)].place(x=50, y=50 + 50 * i)
            items_k["knop{}".format(i + 1)].create_rectangle(0, 0, 150, 30, outline="#fb0", fill="#fb0")
            id_k_last += 1

    def fun_nag(self, event):
        global current_k
        global id_k_last
        print("Enter k it is:", current_k)

if __name__ == "__main__":
    root = Window()
    root.mainloop()
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы