Делаем диапазоны интерактивными в Tkinter в калькуляторе
Я создаю калькулятор в Tkinter, и мне трудно "сообщить" компьютеру, что я нажал определенную клавишу. Я хочу иметь возможность щелкать по определенной клавише / диапазону окна и иметь возможность печатать "yay" (сейчас я сделаю это позже). Кроме того, если вы знаете, как называется этот тип кодирования, или вы видели учебники по нему, пожалуйста, скажите мне, чтобы я мог исследовать его, у меня было много проблем в прошлом с этим. Вот код, который у меня есть (проблемы начинаются со строки 95, где комментарий гласит "сделать клавиши кликабельными").
from tkinter import *
tk = Tk()
gap = 2
height = 700 + gap
width = 600 + gap
canvas = Canvas(width=width, height=height)
tk.title = "Calculator"
# -------------------------------------------------------------------------------------------------------
# Making the background divisions
# -------------------------------------------------------------------------------------------------------
# Number Board
canvas.create_rectangle(width - width + 4 * gap, height - height + 4 * gap, width - gap, height * (1/6))
# -------------------------------------------------------------------------------------------------------
# Key 1 - AC
canvas.create_rectangle(width - width + 4 * gap, height * (1 / 6), width * (1 / 4), height * (2/6))
# Key 2 - Radical
canvas.create_rectangle((1 / 4) * width, height * (1 / 6), width * (2/4), height * (2 / 6))
# Key 3 - Exponents
canvas.create_rectangle((2 / 4) * width, height * (1 / 6), width * (3 / 4), height * (2 / 6))
# Key 4 - Division
canvas.create_rectangle((3 / 4) * width, height * (1 / 6), width * (4 / 4) - gap, height * (2 / 6))
# -------------------------------------------------------------------------------------------------------
# Key 5 - 7
canvas.create_rectangle(width - width + 4 * gap, height * (2 / 6), width * (1 / 4), height * (3 / 6))
# Key 6 - 8
canvas.create_rectangle((1 / 4) * width, height * (2 / 6), width * (2 / 4), height * (3 / 6))
# Key 7 - 9
canvas.create_rectangle((2 / 4) * width, height * (2 / 6), width * (3 / 4), height * (3 / 6))
# Key 8 - Multiplication
canvas.create_rectangle((3 / 4) * width, height * (2 / 6), width - gap, height * (3 / 6))
# -------------------------------------------------------------------------------------------------------
# Key 9 - 4
canvas.create_rectangle(width - width + 4 * gap, height * (3 / 6), width * (1 / 4), height * (4 / 6))
# Key 10 - 5
canvas.create_rectangle((1 / 4) * width, height * (3 / 6), width * (2 / 4), height * (4 / 6))
# Key 11 - 6
canvas.create_rectangle((2 / 4) * width, height * (3 / 6), width * (3 / 4), height * (4 / 6))
# Key 12 - Subtraction
canvas.create_rectangle((3 / 4) * width, height * (3 / 6), width - gap, height * (4 / 6))
# -------------------------------------------------------------------------------------------------------
# Key 13 - 1
canvas.create_rectangle(width - width + 4 * gap, height * (4 / 6), width * (1 / 4), height * (5 / 6))
# Key 14 - 2
canvas.create_rectangle((1 / 4) * width, height * (4 / 6), width * (2 / 4), height * (5 / 6))
# Key 15 - 3
canvas.create_rectangle((2 / 4) * width, height * (4 / 6), width * (3 / 4), height * (5 / 6))
# Key 16 - Addition
canvas.create_rectangle((3 / 4) * width, height * (4 / 6), width - gap, height * (5 / 6))
# -------------------------------------------------------------------------------------------------------
# Key 17 - Parentheses
canvas.create_rectangle(width - width + 4 * gap, height * (5 / 6), width * (1 / 4), height)
# Key 18 - 0
canvas.create_rectangle((1 / 4) * width, height * (5 / 6), width * (2 / 4), height)
# Key 19 - Decimals
canvas.create_rectangle((2 / 4) * width, height * (5 / 6), width * (3 / 4), height)
# Key 20 - Enter
canvas.create_rectangle((3 / 4) * width, height * (5 / 6), width - gap, height)
# -------------------------------------------------------------------------------------------------------
# -------------------------------------------------------------------------------------------------------
# -------------------------------------------------------------------------------------------------------
# Making the keys clickable
# -------------------------------------------------------------------------------------------------------
key_board = [['' for x in range(4)] for y in range(6)]
class WhichKey:
def click(self, row, col):
if (row, col) in range[1, 2]:
print("yay")
def mouse_click(c, event):
col = int(event.x / 4)
row = int(event.y / 6)
c.click(row, col)
keyclick = WhichKey
canvas.pack()
canvas.bind("<Button-1>", lambda event: mouse_click(keyclick, event))
canvas.mainloop()
Опять же, если вы знаете что-нибудь, что может помочь мне с этой проблемой в будущем, пожалуйста, сообщите мне. Я думаю, что проблема связана с моим использованием классов, диапазонов и, возможно, некоторых других вещей.