Dans un programme avec interface graphique wxPython, j'ai un objet graphique de type liste virtuelle qui possède plusieurs colonnes.
Ces colonnes sont initialisées par mon code comme ceci.
self.columns = [u"Nom",
u"Mouvement",
u"Affectation",
u"Montant",
u"Observation",
u"Date début",
u"Date fin",
u"Périodicité"]
index = 0
for c in self.columns :
self.InsertColumn (index, c)
index += 1
En changeant l'ordre des éléments dans self.columns, je peux changer l'ordre d'affichage des colonnes dans la liste.
Mon problème est que partout ailleurs dans le code, c'est le numéro de colonne qui est utilisé.
Par exemple, wxPython envoie un évènement à mon application pour demander le contenu de la colonne x de la ligne y.
Je fais alors :
if x == self.columns.index(u"Nom") :
...
elif x == self.columns.index(u"Mouvement") :
...
etc
Ca marche mais ça ne me plait pas. Et bonjour les bugs quand je changerais un nom de colonne un jour.
Et je ne peux pas non plus changer l'ordre des colonnes dynamiquement pendant l'exécution.
J'aimerais remplir des variables contenant le numéro de colonne automatiquement à l'init.
J'ai pensé à un truc du genre :
Mais après je fais comment pour affecter une valeur aux variables self.col_xxx ?
Il n'y a pas de pointeurs en Python mais c'est bien un truc du genre qu'il me faudrait ici.
Je vois bien une solution avec exec mais je trouve ça moche:
Le 14/10/2010 10:14, Pierre Maurette a écrit :> Pierre Quentel, le 14/1 0/2010 a écrit :
> [...]
>> L'initialisation devient :
>> for index,c in enumerate(self.columns) : >> self.InsertColumn (index, c[0]) >> index += 1
> index += 1 ?
Problème de copier-coller.
je confirme...
NicolasP
Le 14/10/2010 09:54, NicolasP a écrit :
Le 14/10/2010 09:39, Pierre Quentel a écrit :
On 13 oct, 10:05, NicolasP wrote:
Bonjour,
Dans un programme avec interface graphique wxPython, j'ai un objet graphique de type liste virtuelle qui possède plusieurs colonnes. Ces colonnes sont initialisées par mon code comme ceci.
self.columns = [u"Nom", u"Mouvement", u"Affectation", u"Montant", u"Observation", u"Date début", u"Date fin", u"Périodicité"] index = 0 for c in self.columns : self.InsertColumn (index, c) index += 1
En changeant l'ordre des éléments dans self.columns, je peux changer l'ordre d'affichage des colonnes dans la liste.
Mon problème est que partout ailleurs dans le code, c'est le numéro de colonne qui est utilisé. Par exemple, wxPython envoie un évènement à mon application pour demander le contenu de la colonne x de la ligne y. Je fais alors : if x == self.columns.index(u"Nom") : ... elif x == self.columns.index(u"Mouvement") : ... etc
Ca marche mais ça ne me plait pas. Et bonjour les bugs quand je changerais un nom de colonne un jour. Et je ne peux pas non plus changer l'ordre des colonnes dynamiquement pendant l'exécution.
J'aimerais remplir des variables contenant le numéro de colonne automatiquement à l'init. J'ai pensé à un truc du genre :
Mais après je fais comment pour affecter une valeur aux variables self.col_xxx ? Il n'y a pas de pointeurs en Python mais c'est bien un truc du genre qu'il me faudrait ici.
Je vois bien une solution avec exec mais je trouve ça moche:
for index,c in enumerate(self.columns) : self.InsertColumn (index, c[0]) index += 1
Quand tu reçois l'événement référencé par le numéro de colonne, tu récupères le gestionnaire d'événement :
gestionnaire = self.columns[x][1]
et après il ne reste plus qu'à l'exécuter, avec les éventuels paramètres passés par wxPython, genre :
gestionnaire(y)
- Pierre
Bonjour Pierre,
Ton idée me plait. J'essaie ça ce soir.
J'ai poussé l'idée plus loin en créant des objets ColumnXXX() possédant des méthodes GetName(), GetText()... self.columns est maintenant une liste simple d'objets ColumXXX.
Merci pour l'idée.
Nicolas
Nicolas
Le 14/10/2010 09:54, NicolasP a écrit :
Le 14/10/2010 09:39, Pierre Quentel a écrit :
On 13 oct, 10:05, NicolasP<nicol...@aaton.com> wrote:
Bonjour,
Dans un programme avec interface graphique wxPython, j'ai un objet graphique de type liste virtuelle qui possède plusieurs colonnes.
Ces colonnes sont initialisées par mon code comme ceci.
self.columns = [u"Nom",
u"Mouvement",
u"Affectation",
u"Montant",
u"Observation",
u"Date début",
u"Date fin",
u"Périodicité"]
index = 0
for c in self.columns :
self.InsertColumn (index, c)
index += 1
En changeant l'ordre des éléments dans self.columns, je peux changer l'ordre d'affichage des colonnes dans la liste.
Mon problème est que partout ailleurs dans le code, c'est le numéro de colonne qui est utilisé.
Par exemple, wxPython envoie un évènement à mon application pour demander le contenu de la colonne x de la ligne y.
Je fais alors :
if x == self.columns.index(u"Nom") :
...
elif x == self.columns.index(u"Mouvement") :
...
etc
Ca marche mais ça ne me plait pas. Et bonjour les bugs quand je changerais un nom de colonne un jour.
Et je ne peux pas non plus changer l'ordre des colonnes dynamiquement pendant l'exécution.
J'aimerais remplir des variables contenant le numéro de colonne automatiquement à l'init.
J'ai pensé à un truc du genre :
Mais après je fais comment pour affecter une valeur aux variables self.col_xxx ?
Il n'y a pas de pointeurs en Python mais c'est bien un truc du genre qu'il me faudrait ici.
Je vois bien une solution avec exec mais je trouve ça moche:
for index,c in enumerate(self.columns) :
self.InsertColumn (index, c[0])
index += 1
Quand tu reçois l'événement référencé par le numéro de colonne, tu
récupères le gestionnaire d'événement :
gestionnaire = self.columns[x][1]
et après il ne reste plus qu'à l'exécuter, avec les éventuels
paramètres passés par wxPython, genre :
gestionnaire(y)
- Pierre
Bonjour Pierre,
Ton idée me plait.
J'essaie ça ce soir.
J'ai poussé l'idée plus loin en créant des objets ColumnXXX() possédant des méthodes GetName(), GetText()...
self.columns est maintenant une liste simple d'objets ColumXXX.
Dans un programme avec interface graphique wxPython, j'ai un objet graphique de type liste virtuelle qui possède plusieurs colonnes. Ces colonnes sont initialisées par mon code comme ceci.
self.columns = [u"Nom", u"Mouvement", u"Affectation", u"Montant", u"Observation", u"Date début", u"Date fin", u"Périodicité"] index = 0 for c in self.columns : self.InsertColumn (index, c) index += 1
En changeant l'ordre des éléments dans self.columns, je peux changer l'ordre d'affichage des colonnes dans la liste.
Mon problème est que partout ailleurs dans le code, c'est le numéro de colonne qui est utilisé. Par exemple, wxPython envoie un évènement à mon application pour demander le contenu de la colonne x de la ligne y. Je fais alors : if x == self.columns.index(u"Nom") : ... elif x == self.columns.index(u"Mouvement") : ... etc
Ca marche mais ça ne me plait pas. Et bonjour les bugs quand je changerais un nom de colonne un jour. Et je ne peux pas non plus changer l'ordre des colonnes dynamiquement pendant l'exécution.
J'aimerais remplir des variables contenant le numéro de colonne automatiquement à l'init. J'ai pensé à un truc du genre :
Mais après je fais comment pour affecter une valeur aux variables self.col_xxx ? Il n'y a pas de pointeurs en Python mais c'est bien un truc du genre qu'il me faudrait ici.
Je vois bien une solution avec exec mais je trouve ça moche:
for index,c in enumerate(self.columns) : self.InsertColumn (index, c[0]) index += 1
Quand tu reçois l'événement référencé par le numéro de colonne, tu récupères le gestionnaire d'événement :
gestionnaire = self.columns[x][1]
et après il ne reste plus qu'à l'exécuter, avec les éventuels paramètres passés par wxPython, genre :
gestionnaire(y)
- Pierre
Bonjour Pierre,
Ton idée me plait. J'essaie ça ce soir.
J'ai poussé l'idée plus loin en créant des objets ColumnXXX() possédant des méthodes GetName(), GetText()... self.columns est maintenant une liste simple d'objets ColumXXX.
> Ceci étant, ça continue à me paraitre bancal comme truc, et comme > toutes les solutions bancales, la solution est généralement dans 1/ > une meilleure compréhension de l'outil (ici wxWidgets) et 2/ la > structure de données appropriée.
C'est justement ce que je cherche. Un truc pas bancal.
Yeps, mais ça demande plus de contexte que ce que tu a fourni. Mais bon, il semble que tu ais solutionné ton problème, donc...
On 14 oct, 09:48, NicolasP <nicol...@aaton.com> wrote:
Le 13/10/2010 20:01, bruno.desthuilli...@gmail.com a écrit :
(snip)
> Ceci étant, ça continue à me paraitre bancal comme truc, et comme
> toutes les solutions bancales, la solution est généralement dans 1/
> une meilleure compréhension de l'outil (ici wxWidgets) et 2/ la
> structure de données appropriée.
C'est justement ce que je cherche. Un truc pas bancal.
Yeps, mais ça demande plus de contexte que ce que tu a fourni. Mais
bon, il semble que tu ais solutionné ton problème, donc...
> Ceci étant, ça continue à me paraitre bancal comme truc, et comme > toutes les solutions bancales, la solution est généralement dans 1/ > une meilleure compréhension de l'outil (ici wxWidgets) et 2/ la > structure de données appropriée.
C'est justement ce que je cherche. Un truc pas bancal.
Yeps, mais ça demande plus de contexte que ce que tu a fourni. Mais bon, il semble que tu ais solutionné ton problème, donc...
bruno.desthuilliers
On 15 oct, 08:44, NicolasP wrote: (snip)
J'ai poussé l'idée plus loin en créant des objets ColumnXXX() poss édant des méthodes GetName(), GetText()...
Totalement HS, mais la convention de nommage en python serait "get_name" et "get_text" - mais bon, je ne sais plus si wxWidget respecte cette convention, et puis l'essentiel est que ton nommage soit cohérent pour ce projet.
On 15 oct, 08:44, NicolasP <nicol...@aaton.com> wrote:
(snip)
J'ai poussé l'idée plus loin en créant des objets ColumnXXX() poss édant des méthodes GetName(), GetText()...
Totalement HS, mais la convention de nommage en python serait
"get_name" et "get_text" - mais bon, je ne sais plus si wxWidget
respecte cette convention, et puis l'essentiel est que ton nommage
soit cohérent pour ce projet.
J'ai poussé l'idée plus loin en créant des objets ColumnXXX() poss édant des méthodes GetName(), GetText()...
Totalement HS, mais la convention de nommage en python serait "get_name" et "get_text" - mais bon, je ne sais plus si wxWidget respecte cette convention, et puis l'essentiel est que ton nommage soit cohérent pour ce projet.
NicolasP
Le 15/10/2010 15:02, a écrit :
On 15 oct, 08:44, NicolasP wrote: (snip)
J'ai poussé l'idée plus loin en créant des objets ColumnXXX() possédant des méthodes GetName(), GetText()...
Totalement HS, mais la convention de nommage en python serait "get_name" et "get_text" - mais bon, je ne sais plus si wxWidget respecte cette convention, et puis l'essentiel est que ton nommage soit cohérent pour ce projet.
wxPython ne respecte pas la convention de nommage de Python mais celle de wxWidget qui est une librairie C++. J'ai fait le choix de respecter celle de wxPython.
Le 15/10/2010 15:02, bruno.desthuilliers@gmail.com a écrit :
On 15 oct, 08:44, NicolasP<nicol...@aaton.com> wrote:
(snip)
J'ai poussé l'idée plus loin en créant des objets ColumnXXX() possédant des méthodes GetName(), GetText()...
Totalement HS, mais la convention de nommage en python serait
"get_name" et "get_text" - mais bon, je ne sais plus si wxWidget
respecte cette convention, et puis l'essentiel est que ton nommage
soit cohérent pour ce projet.
wxPython ne respecte pas la convention de nommage de Python mais celle de wxWidget qui est une librairie C++. J'ai fait le choix de respecter celle de wxPython.
J'ai poussé l'idée plus loin en créant des objets ColumnXXX() possédant des méthodes GetName(), GetText()...
Totalement HS, mais la convention de nommage en python serait "get_name" et "get_text" - mais bon, je ne sais plus si wxWidget respecte cette convention, et puis l'essentiel est que ton nommage soit cohérent pour ce projet.
wxPython ne respecte pas la convention de nommage de Python mais celle de wxWidget qui est une librairie C++. J'ai fait le choix de respecter celle de wxPython.
NicolasP
Le 15/10/2010 15:00, a écrit :
On 14 oct, 09:48, NicolasP wrote:
Le 13/10/2010 20:01, a écrit :
(snip)
Ceci étant, ça continue à me paraitre bancal comme truc, et comme toutes les solutions bancales, la solution est généralement dans 1/ une meilleure compréhension de l'outil (ici wxWidgets) et 2/ la structure de données appropriée.
C'est justement ce que je cherche. Un truc pas bancal.
Yeps, mais ça demande plus de contexte que ce que tu a fourni. Mais bon, il semble que tu ais solutionné ton problème, donc...
C'est jamais facile de décrire un problème, même simple. Quand on a le nez dans le guidon, on oublie toujours des infos évidentes pour celui qui décrit le problème mais pas du tout pour le lecteur. Ceci-dit, mon exposé ne devait pas être si mauvais que ça car visiblement certains l'ont compris et proposé des solutions.
Le 15/10/2010 15:00, bruno.desthuilliers@gmail.com a écrit :
On 14 oct, 09:48, NicolasP<nicol...@aaton.com> wrote:
Le 13/10/2010 20:01, bruno.desthuilli...@gmail.com a écrit :
(snip)
Ceci étant, ça continue à me paraitre bancal comme truc, et comme
toutes les solutions bancales, la solution est généralement dans 1/
une meilleure compréhension de l'outil (ici wxWidgets) et 2/ la
structure de données appropriée.
C'est justement ce que je cherche. Un truc pas bancal.
Yeps, mais ça demande plus de contexte que ce que tu a fourni. Mais
bon, il semble que tu ais solutionné ton problème, donc...
C'est jamais facile de décrire un problème, même simple.
Quand on a le nez dans le guidon, on oublie toujours des infos évidentes pour celui qui décrit le problème mais pas du tout pour le lecteur.
Ceci-dit, mon exposé ne devait pas être si mauvais que ça car visiblement certains l'ont compris et proposé des solutions.
Ceci étant, ça continue à me paraitre bancal comme truc, et comme toutes les solutions bancales, la solution est généralement dans 1/ une meilleure compréhension de l'outil (ici wxWidgets) et 2/ la structure de données appropriée.
C'est justement ce que je cherche. Un truc pas bancal.
Yeps, mais ça demande plus de contexte que ce que tu a fourni. Mais bon, il semble que tu ais solutionné ton problème, donc...
C'est jamais facile de décrire un problème, même simple. Quand on a le nez dans le guidon, on oublie toujours des infos évidentes pour celui qui décrit le problème mais pas du tout pour le lecteur. Ceci-dit, mon exposé ne devait pas être si mauvais que ça car visiblement certains l'ont compris et proposé des solutions.