Я работаю над классом, который поддерживает кнопку с несколькими шрифтами, встраивая несколько виджетов в рамку. Теперь я пытаюсь обработать экземпляр класса, вызывая метод bind()
, но не могу заставить его работать. Я думал, что класс просто унаследует метод bind()
от фрейма, но, похоже, в этом случае он не работает. Когда я щелкаю правой кнопкой мыши по второй кнопке (экземпляр класса), я не получаю свое печатное утверждение. Что я делаю неправильно? Образец для воспроизведения вопроса:
import tkinter as tk
class ButtonF(tk.Frame):
def __init__(self, master=None, **options):
self.command = options.pop('command', None)
text = options.pop('text', '')
tk.Frame.__init__(self, master, **options)
self.b = tk.Button(master, text=text, command=self.command)
self.bind('<Button-1>', self._click)
self.bind('<ButtonRelease-1>', self._release)
self.b.pack()
def _click(self):
self.config(relief=tk.SUNKEN)
if self.command:
self.command()
def _release(self):
self.config(relief=tk.RAISED)
def bind(self, *a, **kw):
tk.Frame.bind(self, *a, **kw)
if __name__ == '__main__':
root = tk.Tk()
root.title('Frame Button')
root.but1 = tk.Button(root, text='Button 1 (Regular)', command=lambda *a:print('Button 1 Click!'))
root.but1.pack(side=tk.LEFT)
root.but2 = ButtonF(root, text='Button 2 (ButtonF)', command=lambda *a:print('Button 2 Click!')) #
root.but2.pack(side=tk.LEFT)
root.but1.bind('<Button-3>', lambda *a: print('Button 1 Right-Click!'))
root.but2.bind('<Button-3>', lambda *a: print('Button 2 Right-Click!')) #### THIS DOESN'T WORK ####
root.mainloop()