Bonjour.
Dans mon programme, j'utilise quelques OptionMenu de la bibliothèque Tkinter, mais je ne parviens pas à changer leur taille simplement. Soit je leur donne un nom de variable, et je met :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
opt=OptionMenu(f2,var,'opt1',opt2','opt3',command=commande)
opt["width"] = 10
opt.grid(row=0,column=0)
Soit je copie les classes OptionMenu et _setit de Tkinter en ajoutant au tupple kw "width":10, mais qui ne correspondra pas à la valeur requise pour mes fonctions secondaires, ou j'ajoute à la variable callback kwargs.get('width') pour le modifier dans un appel de classe.
Sinon, je garde mon ancienne méthode : mettre pleins d'espaces dans les options pour forcer la largeur, mais 10 espaces de chaque côté de la valeur de la variable, c'est pas joli.
Mais n'y a-t-il pas un moyen plus simple de modifier la largeur de l'OptionMenu ? Ou au pire, de faire un alias de la class d'origine pour y ajouter l'option width ?

Code de la classe Tkinter.OptionMenu (et _setit)
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class _setit:
    """Internal class. It wraps the command in the widget OptionMenu."""
    def __init__(self, var, value, callback=None):
        self.__value = value
        self.__var = var
        self.__callback = callback
    def __call__(self, *args):
        self.__var.set(self.__value)
        if self.__callback:
            self.__callback(self.__value, *args)
 
class OptionMenu(Menubutton):
    """OptionMenu which allows the user to select a value from a menu."""
    def __init__(self, master, variable, value, *values, **kwargs):
        """Construct an optionmenu widget with the parent MASTER, with
        the resource textvariable set to VARIABLE, the initially selected
        value VALUE, the other menu values VALUES and an additional
        keyword argument command."""
        kw = {"borderwidth": 2, "textvariable": variable,
              "indicatoron": 1, "relief": RAISED, "anchor": "c",
              "highlightthickness": 2}
        Widget.__init__(self, master, "menubutton", kw)
        self.widgetName = 'tk_optionMenu'
        menu = self.__menu = Menu(self, name="menu", tearoff=0)
        self.menuname = menu._w
        # 'command' is the only supported keyword
        callback = kwargs.get('command')
        if kwargs.has_key('command'):
            del kwargs['command']
        if kwargs:
            raise TclError, 'unknown option -'+kwargs.keys()[0]
        menu.add_command(label=value,
                 command=_setit(variable, value, callback))
        for v in values:
            menu.add_command(label=v,
                     command=_setit(variable, v, callback))
        self["menu"] = menu
 
    def __getitem__(self, name):
        if name == 'menu':
            return self.__menu
        return Widget.__getitem__(self, name)
 
    def destroy(self):
        """Destroy this widget and the associated menu."""
        Menubutton.destroy(self)
        self.__menu = None
Merci.