У меня есть сетка кнопок в сетке 8x12.В конце концов, я хочу иметь возможность раскрасить раздел (например, верхнюю левую сетку 3х3) определенным цветом.Пока у меня есть этот вопрос.Можно ли получить виджет одной кнопки, используя button.bind("<Button-1>", myfunc2)
, а затем получить виджет второй кнопки, используя button.bind("<ButtonRelease-1>", myfunc2)
?Набросок кода, который у меня есть сейчас, ниже
class MyApp:
def __init__(self, main):
self.button_frame = tk.Frame(main)
tk.Grid.rowconfigure(root, 0, weight=1)
tk.Grid.columnconfigure(root, 0, weight=1)
self.button_frame.grid(row=0, column=0, sticky='nsew')
self.grid = tk.Frame(self.button_frame)
self.grid.grid(sticky='nsew', column=0, row=7, columnspan=2)
tk.Grid.rowconfigure(self.button_frame, 7, weight=1)
tk.Grid.columnconfigure(self.button_frame, 0, weight=1)
self.button_list = {}
self.createbuttongrid()
def createbuttongrid(self):
label = 1
for row in range(8):
for column in range(12):
button = tk.Button(self.button_frame, text='Well %s' % label)
button.bind("<Button-1>", self.buttonclick) # this line is in question
button.bind("<ButtonRelease-1>", self.buttonrelease) # along with this line
button.grid(row=row, column=column, sticky='nsew')
self.button_list[button] = (row, column)
label += 1
def buttonclick(self, event):
first_button = event.widget
print(self.button_list[first_button])
def buttonrelease(self, event):
second_button = event.widget
print(self.button_list[second_button])
if __name__ == "__main__":
import tkinter as tk
root = tk.Tk()
MyApp(main=root)
root.mainloop()
(Изменение размера (с приведенным выше примером) не работает идеально, но это пока не важно.)
В настоящее время, когда я запускаю это и нажимаю на верхнюю левую кнопку, я получаю (0, 0), а когда я отпускаю, я также получаю (0, 0).Я думаю, это потому, что один и тот же виджет передается в def buttonclick
и def buttonrelease
, но я не уверен на 100%