Je ne trouve pas d'autre façon d'accéder aux lignes de menu que par
l'intermédiaire d'un indice:
menu.menutop['file'].entryconfig(2, label='Niou...')
Je m'explique un peu mieux. Je fais des classes pour les situations les
plus classiques d'interface, afin de n'avoir à modifier qu'une
structure de paramètres en cours de développement. Par exemple ici (en
construction ! la structure n'est pas finalisée, loin de là) :
menu.menutop['file'] est ainsi un objet Menu, correspondant au "têtes
de menus", juste en dessous du toplevel. Les objets de ce type sont
values d'un dictionnaire membre de ma classe. Mais pas moyen de gérer
les lignes de menu comme des objets. Ce que je fais et qui fonctionne,
c'est un dictionnaire membre dont les keys sont les 'new', 'open', etc.
et les values les indices. Ainsi, j'écris:
menu.menutop['file'].entryconfig(menu.menuitems['new'],
label='Niou...')
Ma question est juste de savoir si quelque chose de plus simple
m'aurait échappé ?
L'autre souci sur lequel je n'ai pas encore passé beaucoup de temps,
c'est que pour attacher une méthode à command, je passe pour l'instant
par un eval:
if menuitem[3]:
command = eval('master.' + menuitem[3])
else:
command = None
Ce n'est pas satisfaisant, hein ?
Bonne journée à tous, et merci pour vos suggestions...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Eric Brunel
On Fri, 06 Apr 2007 12:30:39 +0200, Pierre Maurette wrote:
Bonjour,
Je ne trouve pas d'autre façon d'accéder aux lignes de menu que par l'intermédiaire d'un indice: menu.menutop['file'].entryconfig(2, label='Niou...') Je m'explique un peu mieux. Je fais des classes pour les situations les plus classiques d'interface, afin de n'avoir à modifier qu'une structure de paramètres en cours de développement. Par exemple ici (en construction ! la structure n'est pas finalisée, loin de là) :
menu.menutop['file'] est ainsi un objet Menu, correspondant au "têtes de menus", juste en dessous du toplevel. Les objets de ce type sont values d'un dictionnaire membre de ma classe. Mais pas moyen de gérer les lignes de menu comme des objets. Ce que je fais et qui fonctionne, c'est un dictionnaire membre dont les keys sont les 'new', 'open', etc. et les values les indices. Ainsi, j'écris: menu.menutop['file'].entryconfig(menu.menuitems['new'], label='Niou...')
Ma question est juste de savoir si quelque chose de plus simple m'aurait échappé ?
Si la question était "y-a-t'il une classe *dans Tkinter* qui permet de représenter les items de menu?", la réponse est non. Il faut donc soit s'en passer, soit la faire soi-même.
L'autre souci sur lequel je n'ai pas encore passé beaucoup de temps, c'est que pour attacher une méthode à command, je passe pour l'instant par un eval: if menuitem[3]: command = eval('master.' + menuitem[3]) else: command = None
Ce n'est pas satisfaisant, hein ?
Ben non. Mais pourquoi enregistrer le nom de la méthode au lieu de la méthode elle-même? Genre: menu_params = [ ['file', 'Fichier (inifiles)', ['new', 'Nouveau...', 0, master.go], ['open', 'Ouvrir...', 0, master.open_inifile], ['save', 'Sauver sous...', 0, master.save_inifile], ['insert', 'Insère...', 0, None], # etc... ] ]
Question (piège) subsidiaire: pourquoi master.open_inifile et pas self.open_inifile?
HTH -- python -c "print ''.join([chr(154 - ord(c)) for c in 'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"
On Fri, 06 Apr 2007 12:30:39 +0200, Pierre Maurette
<maurettepierre@wanadoo.fr> wrote:
Bonjour,
Je ne trouve pas d'autre façon d'accéder aux lignes de menu que par
l'intermédiaire d'un indice:
menu.menutop['file'].entryconfig(2, label='Niou...')
Je m'explique un peu mieux. Je fais des classes pour les situations les
plus classiques d'interface, afin de n'avoir à modifier qu'une structure
de paramètres en cours de développement. Par exemple ici (en
construction ! la structure n'est pas finalisée, loin de là) :
menu.menutop['file'] est ainsi un objet Menu, correspondant au "têtes de
menus", juste en dessous du toplevel. Les objets de ce type sont values
d'un dictionnaire membre de ma classe. Mais pas moyen de gérer les
lignes de menu comme des objets. Ce que je fais et qui fonctionne, c'est
un dictionnaire membre dont les keys sont les 'new', 'open', etc. et les
values les indices. Ainsi, j'écris:
menu.menutop['file'].entryconfig(menu.menuitems['new'], label='Niou...')
Ma question est juste de savoir si quelque chose de plus simple m'aurait
échappé ?
Si la question était "y-a-t'il une classe *dans Tkinter* qui permet de
représenter les items de menu?", la réponse est non. Il faut donc soit
s'en passer, soit la faire soi-même.
L'autre souci sur lequel je n'ai pas encore passé beaucoup de temps,
c'est que pour attacher une méthode à command, je passe pour l'instant
par un eval:
if menuitem[3]:
command = eval('master.' + menuitem[3])
else:
command = None
Ce n'est pas satisfaisant, hein ?
Ben non. Mais pourquoi enregistrer le nom de la méthode au lieu de la
méthode elle-même? Genre:
menu_params = [
['file', 'Fichier (inifiles)',
['new', 'Nouveau...', 0, master.go],
['open', 'Ouvrir...', 0, master.open_inifile],
['save', 'Sauver sous...', 0, master.save_inifile],
['insert', 'Insère...', 0, None],
# etc...
]
]
Question (piège) subsidiaire: pourquoi master.open_inifile et pas
self.open_inifile?
HTH
--
python -c "print ''.join([chr(154 - ord(c)) for c in
'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"
On Fri, 06 Apr 2007 12:30:39 +0200, Pierre Maurette wrote:
Bonjour,
Je ne trouve pas d'autre façon d'accéder aux lignes de menu que par l'intermédiaire d'un indice: menu.menutop['file'].entryconfig(2, label='Niou...') Je m'explique un peu mieux. Je fais des classes pour les situations les plus classiques d'interface, afin de n'avoir à modifier qu'une structure de paramètres en cours de développement. Par exemple ici (en construction ! la structure n'est pas finalisée, loin de là) :
menu.menutop['file'] est ainsi un objet Menu, correspondant au "têtes de menus", juste en dessous du toplevel. Les objets de ce type sont values d'un dictionnaire membre de ma classe. Mais pas moyen de gérer les lignes de menu comme des objets. Ce que je fais et qui fonctionne, c'est un dictionnaire membre dont les keys sont les 'new', 'open', etc. et les values les indices. Ainsi, j'écris: menu.menutop['file'].entryconfig(menu.menuitems['new'], label='Niou...')
Ma question est juste de savoir si quelque chose de plus simple m'aurait échappé ?
Si la question était "y-a-t'il une classe *dans Tkinter* qui permet de représenter les items de menu?", la réponse est non. Il faut donc soit s'en passer, soit la faire soi-même.
L'autre souci sur lequel je n'ai pas encore passé beaucoup de temps, c'est que pour attacher une méthode à command, je passe pour l'instant par un eval: if menuitem[3]: command = eval('master.' + menuitem[3]) else: command = None
Ce n'est pas satisfaisant, hein ?
Ben non. Mais pourquoi enregistrer le nom de la méthode au lieu de la méthode elle-même? Genre: menu_params = [ ['file', 'Fichier (inifiles)', ['new', 'Nouveau...', 0, master.go], ['open', 'Ouvrir...', 0, master.open_inifile], ['save', 'Sauver sous...', 0, master.save_inifile], ['insert', 'Insère...', 0, None], # etc... ] ]
Question (piège) subsidiaire: pourquoi master.open_inifile et pas self.open_inifile?
HTH -- python -c "print ''.join([chr(154 - ord(c)) for c in 'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"
Pierre Maurette
On Fri, 06 Apr 2007 12:30:39 +0200, Pierre Maurette wrote:
Bonjour,
Je ne trouve pas d'autre façon d'accéder aux lignes de menu que par l'intermédiaire d'un indice: menu.menutop['file'].entryconfig(2, label='Niou...') Je m'explique un peu mieux. Je fais des classes pour les situations les plus classiques d'interface, afin de n'avoir à modifier qu'une structure de paramètres en cours de développement. Par exemple ici (en construction ! la structure n'est pas finalisée, loin de là) :
menu.menutop['file'] est ainsi un objet Menu, correspondant au "têtes de menus", juste en dessous du toplevel. Les objets de ce type sont values d'un dictionnaire membre de ma classe. Mais pas moyen de gérer les lignes de menu comme des objets. Ce que je fais et qui fonctionne, c'est un dictionnaire membre dont les keys sont les 'new', 'open', etc. et les values les indices. Ainsi, j'écris: menu.menutop['file'].entryconfig(menu.menuitems['new'], label='Niou...')
Ma question est juste de savoir si quelque chose de plus simple m'aurait échappé ?
Si la question était "y-a-t'il une classe *dans Tkinter* qui permet de représenter les items de menu?", la réponse est non. Il faut donc soit s'en passer, soit la faire soi-même.
Merci, solution adoptée, une classe interne. J'étais resté bloqué sur la recherche de l'objet inexistant.
L'autre souci sur lequel je n'ai pas encore passé beaucoup de temps, c'est que pour attacher une méthode à command, je passe pour l'instant par un eval: if menuitem[3]: command = eval('master.' + menuitem[3]) else: command = None
Ce n'est pas satisfaisant, hein ?
Ben non. Mais pourquoi enregistrer le nom de la méthode au lieu de la méthode elle-même? Genre: menu_params = [ ['file', 'Fichier (inifiles)', ['new', 'Nouveau...', 0, master.go], ['open', 'Ouvrir...', 0, master.open_inifile], ['save', 'Sauver sous...', 0, master.save_inifile], ['insert', 'Insère...', 0, None], # etc... ] ]
Merci bien. C'est ce que j'ai fait. A ceci près qu'il m'a fallu déclarer / définir mes listes dans ma classe principale RepFTPApp(Tk) en dessous des méthodes, et non plus en tête de fichier. Sans self., donc il me semble en variables de classe. Et j'ai nommé dans la liste les fonctions simplement go, open_inifile et save_inifile. Pas pu faire autrement sans me faire jeter, doit y avoir plus propre. Je corrige, j'ai déclaré les listes hors de la classe, en dessous de la classe, en nommant logiquement les fonctions RepFTPApp.go, etc. C'est clair et logique, je ne sais pas si on peut passer outre les références forward en python ?
Question (piège) subsidiaire: pourquoi master.open_inifile et pas self.open_inifile?
Au départ j'avais un fichier repftp.py, appli en ligne de commandes, repftptk.py, cloquodromage du précédent, et petrustkwidgets.py, quelques widgets de base, dont la classe SimpleMenu(Menu). Le __init__ de cette classe reçoit master (que j'ai depuis renommé en parent). La liaison de la fonction aux éléments de menu et donc l'eval se produisant dans cet __init__, ...
-- Pierre Maurette
On Fri, 06 Apr 2007 12:30:39 +0200, Pierre Maurette
<maurettepierre@wanadoo.fr> wrote:
Bonjour,
Je ne trouve pas d'autre façon d'accéder aux lignes de menu que par
l'intermédiaire d'un indice:
menu.menutop['file'].entryconfig(2, label='Niou...')
Je m'explique un peu mieux. Je fais des classes pour les situations les
plus classiques d'interface, afin de n'avoir à modifier qu'une structure de
paramètres en cours de développement. Par exemple ici (en construction ! la
structure n'est pas finalisée, loin de là) :
menu.menutop['file'] est ainsi un objet Menu, correspondant au "têtes de
menus", juste en dessous du toplevel. Les objets de ce type sont values
d'un dictionnaire membre de ma classe. Mais pas moyen de gérer les lignes
de menu comme des objets. Ce que je fais et qui fonctionne, c'est un
dictionnaire membre dont les keys sont les 'new', 'open', etc. et les
values les indices. Ainsi, j'écris:
menu.menutop['file'].entryconfig(menu.menuitems['new'], label='Niou...')
Ma question est juste de savoir si quelque chose de plus simple m'aurait
échappé ?
Si la question était "y-a-t'il une classe *dans Tkinter* qui permet de
représenter les items de menu?", la réponse est non. Il faut donc soit s'en
passer, soit la faire soi-même.
Merci, solution adoptée, une classe interne. J'étais resté bloqué sur
la recherche de l'objet inexistant.
L'autre souci sur lequel je n'ai pas encore passé beaucoup de temps, c'est
que pour attacher une méthode à command, je passe pour l'instant par un
eval:
if menuitem[3]:
command = eval('master.' + menuitem[3])
else:
command = None
Ce n'est pas satisfaisant, hein ?
Ben non. Mais pourquoi enregistrer le nom de la méthode au lieu de la méthode
elle-même? Genre:
menu_params = [
['file', 'Fichier (inifiles)',
['new', 'Nouveau...', 0, master.go],
['open', 'Ouvrir...', 0, master.open_inifile],
['save', 'Sauver sous...', 0, master.save_inifile],
['insert', 'Insère...', 0, None],
# etc...
]
]
Merci bien. C'est ce que j'ai fait. A ceci près qu'il m'a fallu
déclarer / définir mes listes dans ma classe principale RepFTPApp(Tk)
en dessous des méthodes, et non plus en tête de fichier. Sans self.,
donc il me semble en variables de classe. Et j'ai nommé dans la liste
les fonctions simplement go, open_inifile et save_inifile. Pas pu faire
autrement sans me faire jeter, doit y avoir plus propre.
Je corrige, j'ai déclaré les listes hors de la classe, en dessous de la
classe, en nommant logiquement les fonctions RepFTPApp.go, etc. C'est
clair et logique, je ne sais pas si on peut passer outre les références
forward en python ?
Question (piège) subsidiaire: pourquoi master.open_inifile et pas
self.open_inifile?
Au départ j'avais un fichier repftp.py, appli en ligne de commandes,
repftptk.py, cloquodromage du précédent, et petrustkwidgets.py,
quelques widgets de base, dont la classe SimpleMenu(Menu). Le __init__
de cette classe reçoit master (que j'ai depuis renommé en parent). La
liaison de la fonction aux éléments de menu et donc l'eval se
produisant dans cet __init__, ...
On Fri, 06 Apr 2007 12:30:39 +0200, Pierre Maurette wrote:
Bonjour,
Je ne trouve pas d'autre façon d'accéder aux lignes de menu que par l'intermédiaire d'un indice: menu.menutop['file'].entryconfig(2, label='Niou...') Je m'explique un peu mieux. Je fais des classes pour les situations les plus classiques d'interface, afin de n'avoir à modifier qu'une structure de paramètres en cours de développement. Par exemple ici (en construction ! la structure n'est pas finalisée, loin de là) :
menu.menutop['file'] est ainsi un objet Menu, correspondant au "têtes de menus", juste en dessous du toplevel. Les objets de ce type sont values d'un dictionnaire membre de ma classe. Mais pas moyen de gérer les lignes de menu comme des objets. Ce que je fais et qui fonctionne, c'est un dictionnaire membre dont les keys sont les 'new', 'open', etc. et les values les indices. Ainsi, j'écris: menu.menutop['file'].entryconfig(menu.menuitems['new'], label='Niou...')
Ma question est juste de savoir si quelque chose de plus simple m'aurait échappé ?
Si la question était "y-a-t'il une classe *dans Tkinter* qui permet de représenter les items de menu?", la réponse est non. Il faut donc soit s'en passer, soit la faire soi-même.
Merci, solution adoptée, une classe interne. J'étais resté bloqué sur la recherche de l'objet inexistant.
L'autre souci sur lequel je n'ai pas encore passé beaucoup de temps, c'est que pour attacher une méthode à command, je passe pour l'instant par un eval: if menuitem[3]: command = eval('master.' + menuitem[3]) else: command = None
Ce n'est pas satisfaisant, hein ?
Ben non. Mais pourquoi enregistrer le nom de la méthode au lieu de la méthode elle-même? Genre: menu_params = [ ['file', 'Fichier (inifiles)', ['new', 'Nouveau...', 0, master.go], ['open', 'Ouvrir...', 0, master.open_inifile], ['save', 'Sauver sous...', 0, master.save_inifile], ['insert', 'Insère...', 0, None], # etc... ] ]
Merci bien. C'est ce que j'ai fait. A ceci près qu'il m'a fallu déclarer / définir mes listes dans ma classe principale RepFTPApp(Tk) en dessous des méthodes, et non plus en tête de fichier. Sans self., donc il me semble en variables de classe. Et j'ai nommé dans la liste les fonctions simplement go, open_inifile et save_inifile. Pas pu faire autrement sans me faire jeter, doit y avoir plus propre. Je corrige, j'ai déclaré les listes hors de la classe, en dessous de la classe, en nommant logiquement les fonctions RepFTPApp.go, etc. C'est clair et logique, je ne sais pas si on peut passer outre les références forward en python ?
Question (piège) subsidiaire: pourquoi master.open_inifile et pas self.open_inifile?
Au départ j'avais un fichier repftp.py, appli en ligne de commandes, repftptk.py, cloquodromage du précédent, et petrustkwidgets.py, quelques widgets de base, dont la classe SimpleMenu(Menu). Le __init__ de cette classe reçoit master (que j'ai depuis renommé en parent). La liaison de la fonction aux éléments de menu et donc l'eval se produisant dans cet __init__, ...