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:
En changeant l'ordre des éléments dans self.columns, je peux changer l'ordre d'affichage des colonnes dans la liste.
Il me semble que wxWidgets permet de déplacer des colonnes à l'exécution. Je ne connais pas le binding python, mais je me souviens de GetColAt. Si c'est effectivement le cas, cela devrait te simplifier la vie.
if x == self.columns.index(u"Nom") : ...
Hmmm, j'aurais fait ; if self.columns[x] == u"Nom", histoire d'éviter la recherche dans la liste...
Effectivement, ça serait plus efficace.
Ca marche mais ça ne me plait pas. Et bonjour les bugs quand je changerais un nom de colonne un jour.
[...]
Je ne peux pas t'en dire plus, mais vérifie vraiment ce que permet wxWidgets, je serais surpris qu'il ne fasse pas le travail lui-même, et te permette d'obtenir un numéro de colonne "absolu", càd indépendant des différents déplacements. Auquel cas ta première approche est sûrement la plus simple.
je n'ai pas souvenir de cette fonctionnalité. Je vais chercher...
En changeant l'ordre des éléments dans self.columns, je peux changer
l'ordre d'affichage des colonnes dans la liste.
Il me semble que wxWidgets permet de déplacer des colonnes à
l'exécution. Je ne connais pas le binding python, mais je me souviens de
GetColAt. Si c'est effectivement le cas, cela devrait te simplifier la
vie.
if x == self.columns.index(u"Nom") :
...
Hmmm, j'aurais fait ; if self.columns[x] == u"Nom", histoire d'éviter la
recherche dans la liste...
Effectivement, ça serait plus efficace.
Ca marche mais ça ne me plait pas. Et bonjour les bugs quand je
changerais un nom de colonne un jour.
[...]
Je ne peux pas t'en dire plus, mais vérifie vraiment ce que permet
wxWidgets, je serais surpris qu'il ne fasse pas le travail lui-même, et
te permette d'obtenir un numéro de colonne "absolu", càd indépendant des
différents déplacements. Auquel cas ta première approche est sûrement la
plus simple.
je n'ai pas souvenir de cette fonctionnalité.
Je vais chercher...
En changeant l'ordre des éléments dans self.columns, je peux changer l'ordre d'affichage des colonnes dans la liste.
Il me semble que wxWidgets permet de déplacer des colonnes à l'exécution. Je ne connais pas le binding python, mais je me souviens de GetColAt. Si c'est effectivement le cas, cela devrait te simplifier la vie.
if x == self.columns.index(u"Nom") : ...
Hmmm, j'aurais fait ; if self.columns[x] == u"Nom", histoire d'éviter la recherche dans la liste...
Effectivement, ça serait plus efficace.
Ca marche mais ça ne me plait pas. Et bonjour les bugs quand je changerais un nom de colonne un jour.
[...]
Je ne peux pas t'en dire plus, mais vérifie vraiment ce que permet wxWidgets, je serais surpris qu'il ne fasse pas le travail lui-même, et te permette d'obtenir un numéro de colonne "absolu", càd indépendant des différents déplacements. Auquel cas ta première approche est sûrement la plus simple.
je n'ai pas souvenir de cette fonctionnalité. Je vais chercher...
Merci
Nicolas
-- Alain.
cémoi
Salut,
ta requête me parait quelque peu confuse, mais je vais essayer de faire quelques suggestions ...
Le 13/10/2010 10:05, NicolasP a écrit :
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
Ici on peut faire plus court:
for index, c in enumerate(self.columns): self.InsertColumn(index, c)
ou même:
[self.insertColumn(index, c) for index, c in enumerate(self.columns)]
<snip>
Je vois bien une solution avec exec mais je trouve ça moche:
for i, (k, v) in enumerate(self.columns): self.InsertColumn(i, k) v = i
Un peu de relecture du didacticiel Python n'est peut-être pas superflu :) Tu verras qu'une fois que tu sauras manipuler les listes, les tuples et les dictionnaires avec aisance tu trouveras certainement un code plus direct et plus élégant.
HTH,
Laurent
Salut,
ta requête me parait quelque peu confuse, mais je vais essayer de faire
quelques
suggestions ...
Le 13/10/2010 10:05, NicolasP a écrit :
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
Ici on peut faire plus court:
for index, c in enumerate(self.columns):
self.InsertColumn(index, c)
ou même:
[self.insertColumn(index, c) for index, c in enumerate(self.columns)]
<snip>
Je vois bien une solution avec exec mais je trouve ça moche:
for i, (k, v) in enumerate(self.columns):
self.InsertColumn(i, k)
v = i
Un peu de relecture du didacticiel Python n'est peut-être pas superflu :)
Tu verras qu'une fois que tu sauras manipuler les listes, les tuples et les
dictionnaires avec aisance tu trouveras certainement un code plus direct
et plus élégant.
ta requête me parait quelque peu confuse, mais je vais essayer de faire quelques suggestions ...
Le 13/10/2010 10:05, NicolasP a écrit :
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
Ici on peut faire plus court:
for index, c in enumerate(self.columns): self.InsertColumn(index, c)
ou même:
[self.insertColumn(index, c) for index, c in enumerate(self.columns)]
<snip>
Je vois bien une solution avec exec mais je trouve ça moche:
for i, (k, v) in enumerate(self.columns): self.InsertColumn(i, k) v = i
Un peu de relecture du didacticiel Python n'est peut-être pas superflu :) Tu verras qu'une fois que tu sauras manipuler les listes, les tuples et les dictionnaires avec aisance tu trouveras certainement un code plus direct et plus élégant.
HTH,
Laurent
bruno.desthuilliers
On 13 oct, 18:11, cémoi wrote:
for index, c in enumerate(self.columns): self.InsertColumn(index, c)
ou même:
[self.insertColumn(index, c) for index, c in enumerate(self.columns)]
Ce qui génère une liste pour rien et n'améliore en rien la lisibilit é.
On 13 oct, 18:11, cémoi <laurent.thioudel...@nospam.free.fr> wrote:
for index, c in enumerate(self.columns):
self.InsertColumn(index, c)
ou même:
[self.insertColumn(index, c) for index, c in enumerate(self.columns)]
Ce qui génère une liste pour rien et n'améliore en rien la lisibilit é.
for index, name in self.columns: self.InsertColumn(index, name) self.columns_index[index] = name
# dans le gestionnaire d'évènements colname = self.colums_index[x]
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.
On 13 oct, 10:05, NicolasP <nicol...@aaton.com> wrote:
(snip)
Je vois bien une solution avec exec mais je trouve ça moche:
for index, name in self.columns:
self.InsertColumn(index, name)
self.columns_index[index] = name
# dans le gestionnaire d'évènements
colname = self.colums_index[x]
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.
for index, name in self.columns: self.InsertColumn(index, name) self.columns_index[index] = name
# dans le gestionnaire d'évènements colname = self.colums_index[x]
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émoi
Le 13/10/2010 19:50, a écrit :
On 13 oct, 18:11, cémoi wrote:
for index, c in enumerate(self.columns): self.InsertColumn(index, c)
ou même:
[self.insertColumn(index, c) for index, c in enumerate(self.columns)]
Ce qui génère une liste pour rien et n'améliore en rien la lisibilité.
Oui, mauvais exemple de ma part, désolé !
Le 13/10/2010 19:50, bruno.desthuilliers@gmail.com a écrit :
On 13 oct, 18:11, cémoi<laurent.thioudel...@nospam.free.fr> wrote:
for index, c in enumerate(self.columns):
self.InsertColumn(index, c)
ou même:
[self.insertColumn(index, c) for index, c in enumerate(self.columns)]
Ce qui génère une liste pour rien et n'améliore en rien la lisibilité.
for index, c in enumerate(self.columns): self.InsertColumn(index, c)
ou même:
[self.insertColumn(index, c) for index, c in enumerate(self.columns)]
Ce qui génère une liste pour rien et n'améliore en rien la lisibilité.
Oui, mauvais exemple de ma part, désolé !
Pierre Quentel
On 13 oct, 10:05, NicolasP wrote:
Bonjour,
Dans un programme avec interface graphique wxPython, j'ai un objet graphi que 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 d e colonne qui est utilisé. Par exemple, wxPython envoie un évènement à mon application pour de mander 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 changer ais un nom de colonne un jour. Et je ne peux pas non plus changer l'ordre des colonnes dynamiquement pen dant l'exécution.
J'aimerais remplir des variables contenant le numéro de colonne automat iquement à 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'i l 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 colonn e, 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
On 13 oct, 10:05, NicolasP <nicol...@aaton.com> wrote:
Bonjour,
Dans un programme avec interface graphique wxPython, j'ai un objet graphi que 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 d e colonne qui est utilisé.
Par exemple, wxPython envoie un évènement à mon application pour de mander 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 changer ais un nom de colonne un jour.
Et je ne peux pas non plus changer l'ordre des colonnes dynamiquement pen dant l'exécution.
J'aimerais remplir des variables contenant le numéro de colonne automat iquement à 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'i l me faudrait ici.
Je vois bien une solution avec exec mais je trouve ça moche:
Dans un programme avec interface graphique wxPython, j'ai un objet graphi que 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 d e colonne qui est utilisé. Par exemple, wxPython envoie un évènement à mon application pour de mander 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 changer ais un nom de colonne un jour. Et je ne peux pas non plus changer l'ordre des colonnes dynamiquement pen dant l'exécution.
J'aimerais remplir des variables contenant le numéro de colonne automat iquement à 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'i l 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 colonn e, 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
NicolasP
Le 13/10/2010 18:11, cémoi a écrit :
Salut,
ta requête me parait quelque peu confuse, mais je vais essayer de faire quelques suggestions ...
Le 13/10/2010 10:05, NicolasP a écrit :
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
Ici on peut faire plus court:
for index, c in enumerate(self.columns): self.InsertColumn(index, c)
Effectivement, c'est mieux comme ça.
ou même:
[self.insertColumn(index, c) for index, c in enumerate(self.columns)]
<snip>
Je vois bien une solution avec exec mais je trouve ça moche:
for i, (k, v) in enumerate(self.columns): self.InsertColumn(i, k) v = i
v = i ? Je te renvoie a ce que tu as écrit ci-dessous ;)
Un peu de relecture du didacticiel Python n'est peut-être pas superflu :) Tu verras qu'une fois que tu sauras manipuler les listes, les tuples et les dictionnaires avec aisance tu trouveras certainement un code plus direct et plus élégant.
C'est justement parce que je n'ai pas trouvé par moi-même que je pose la question ici. Sinon, à quoi servirait ce news group ?
Nicolas
HTH,
Laurent
Le 13/10/2010 18:11, cémoi a écrit :
Salut,
ta requête me parait quelque peu confuse, mais je vais essayer de faire quelques
suggestions ...
Le 13/10/2010 10:05, NicolasP a écrit :
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
Ici on peut faire plus court:
for index, c in enumerate(self.columns):
self.InsertColumn(index, c)
Effectivement, c'est mieux comme ça.
ou même:
[self.insertColumn(index, c) for index, c in enumerate(self.columns)]
<snip>
Je vois bien une solution avec exec mais je trouve ça moche:
for i, (k, v) in enumerate(self.columns):
self.InsertColumn(i, k)
v = i
v = i ?
Je te renvoie a ce que tu as écrit ci-dessous ;)
Un peu de relecture du didacticiel Python n'est peut-être pas superflu :)
Tu verras qu'une fois que tu sauras manipuler les listes, les tuples et les
dictionnaires avec aisance tu trouveras certainement un code plus direct
et plus élégant.
C'est justement parce que je n'ai pas trouvé par moi-même que je pose la question ici.
Sinon, à quoi servirait ce news group ?
ta requête me parait quelque peu confuse, mais je vais essayer de faire quelques suggestions ...
Le 13/10/2010 10:05, NicolasP a écrit :
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
Ici on peut faire plus court:
for index, c in enumerate(self.columns): self.InsertColumn(index, c)
Effectivement, c'est mieux comme ça.
ou même:
[self.insertColumn(index, c) for index, c in enumerate(self.columns)]
<snip>
Je vois bien une solution avec exec mais je trouve ça moche:
for i, (k, v) in enumerate(self.columns): self.InsertColumn(i, k) v = i
v = i ? Je te renvoie a ce que tu as écrit ci-dessous ;)
Un peu de relecture du didacticiel Python n'est peut-être pas superflu :) Tu verras qu'une fois que tu sauras manipuler les listes, les tuples et les dictionnaires avec aisance tu trouveras certainement un code plus direct et plus élégant.
C'est justement parce que je n'ai pas trouvé par moi-même que je pose la question ici. Sinon, à quoi servirait ce news group ?
Nicolas
HTH,
Laurent
NicolasP
Le 13/10/2010 20:01, a écrit :
On 13 oct, 10:05, NicolasP wrote: (snip)
Je vois bien une solution avec exec mais je trouve ça moche:
for index, name in self.columns: self.InsertColumn(index, name) self.columns_index[index] = name
# dans le gestionnaire d'évènements colname = self.colums_index[x]
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.
Nicolas
Le 13/10/2010 20:01, bruno.desthuilliers@gmail.com a écrit :
On 13 oct, 10:05, NicolasP<nicol...@aaton.com> wrote:
(snip)
Je vois bien une solution avec exec mais je trouve ça moche:
for index, name in self.columns:
self.InsertColumn(index, name)
self.columns_index[index] = name
# dans le gestionnaire d'évènements
colname = self.colums_index[x]
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.
for index, name in self.columns: self.InsertColumn(index, name) self.columns_index[index] = name
# dans le gestionnaire d'évènements colname = self.colums_index[x]
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.
Nicolas
NicolasP
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.
Nicolas
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:
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: