import os import sys import _tkinter import Tkinter from Tkinter import * class CustomButton(Button): def __init__(self,master,*args,**kwargs): Button.__init__(self,master,*args,**kwargs) self.bind('', self.on_mouse_rightclick) self.entry=None self['text']='12345' def on_mouse_rightclick(self, event): print 'on_mouse_rightclick' if self.entry!=None: print 'Non-null entry' return self.prev_state = self["state"] self.entry=Entry(self,{"width":8}) self.entry.pack(side=TOP,anchor=W) self.entry.insert(0,self['text']) self.entry.bind('', self.on_entry_edit) self.entry.bind('', self.on_escape) self['state']=DISABLED self.lower(self.entry) return def on_entry_edit(self, event): print 'on_entry_edit' entry_str = self.entry.get() self['text']=entry_str self.lift() self['state']=self.prev_state self.entry.destroy() self.entry=None def on_escape(self, event): print 'on_escape' if self.entry==None: return self.lift() self['state']=self.prev_state self.entry.destroy() self.entry=None class Application(Frame): def __init__(self, master=None): self.root = Tk() Frame.__init__(self, master) self.button=CustomButton(self) self.button.pack(side="top",anchor=N) self.button2=CustomButton(self) self.button2.pack(side="top",anchor=N) self.pack() app = Application() app.mainloop()