1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| from Tkinter import *
from tkFileDialog import askopenfilename, asksaveasfilename
# Premier exemple de fonction à fournir
def test(value, *args, **kwargs):
print 'value:', value
print 'args:', args
return True
# Second exemple de fonction à fournir
def browse(value, parent = None):
filename = asksaveasfilename(parent = parent)
return filename
# La nouvelle widget Entry
class ExtendedEntry(Entry):
def __init__(self, master, action = None, actionArgs = None, **kwargs):
if kwargs.has_key('textvariable'):
self.variable = kwargs['textvariable']
del kwargs['textvariable']
elif kwargs.has_key('text'):
self.variable = StringVar()
self.variable.set(str(kwargs['text']))
del kwargs['text']
else:
self.variable = StringVar()
Entry.__init__(self, master, textvariable = self.variable, **kwargs)
if action is not None:
# La fonction à exécuter
self.action = action
# Et ses arguments
self.args = actionArgs
self.config(validate = 'key', validatecommand = (self.register(self._doaction), '%P'))
def _doaction(self, value):
"""Cette methode wrap la fonction à exécuter et doit retourner False ou True pour être en accord avec validatecommand"""
return self.action(value, self.args)
if __name__ == '__main__':
root = Tk()
f = LabelFrame(root, text = 'hello')
f.grid()
e1 = ComboEntry(f, action = test)
e1.grid()
e2 = ComboEntry(f, action = test, actionArgs = ('toto','tutu'))
e2.grid()
e3 = ComboEntry(f, action = browse)
e3.grid()
root.mainloop() |
Partager