Salut,

Pour un projet avec du drag & drop, je dois rajouter des attributs et des méthodes à un ensemble de classes tkinter. Dans l'exemple ci-dessous je rajoute l’attribut dummyVar et la méthode dummyFunc aux classes Tk et Button. La façon de faire avec "exec" étant à mon sens très propice aux critiques, je me demandais si quelqu'un avait quelquechose de plus conventionnel?

A+

Pfeuh

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
class_template = """
class DND(_classname_):
    def __init__(self, *args, **kwds):
        _classname_.__init__(self, *args, **kwds)
        self.dummyVar = None
    def dummyFunc(self):
        return self.dummyVar.upper()
"""
 
def getDND(classname, *args, **kwds):
    exec class_template.replace('_classname_', classname)
    obj = DND(*args, **kwds)
    return obj
 
if __name__ == "__main__":
 
    try:import Tkinter
    except: import tkinter as Tkinter
 
    win = getDND('Tkinter.Tk')
    bt = getDND('Tkinter.Button', win, text='DND object', width=50, height=3)
    bt.grid()
    # test
    assert win.dummyVar == None
    win.dummyVar = 'azerty'
    assert win.dummyFunc() == 'AZERTY'
    assert bt.dummyVar == None
    bt.dummyVar = 'qwerty'
    assert bt.dummyFunc() == 'QWERTY'
 
    win.mainloop()