import os import sys import tkinter as tk class CustomButton(tk.Button): def __init__(self, master, gridargs, **kwargs): tk.Button.__init__(self, master, kwargs) self.gridargs = gridargs self.grid(gridargs) self.entry = tk.Entry(master, width=8) self.entry.insert(0, self['text']) self.bind('', self.on_mouse_rightclick) self.entry.bind('', self.on_entry_edit) self.entry.bind('', self.on_escape) def on_mouse_rightclick(self, event): print('on_mouse_rightclick') self.entry.grid(self.gridargs) self.grid_forget() def on_entry_edit(self, event): print('on_entry_edit') self['text'] = self.entry.get() self.grid(self.gridargs) self.entry.grid_forget() def on_escape(self, event): print('on_escape') self.entry.delete(0, 'end') self.entry.insert(0, self['text']) self.grid(self.gridargs) self.entry.grid_forget() class Application(tk.Tk): def __init__(self): tk.Tk.__init__(self) CustomButton(self, {'row':0}, text='12345') CustomButton(self, {'row':1}, text='abcde') app = Application() app.mainloop()