wxPython

Le
BH
Bonjour,

Est-ce que quelqu'un a une idée comment passer des paramètres entre les
pages d'un wizard ? Dans l'exemple de wizard
http://wiki.wxpython.org/wxWizard que j'ai repris, les classes pages
sont instanciées à la création du wizard et je ne sait donc pas comment
passer des paramètres en faisant "suivant" et "précédent"

Merci pour votre aide.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
jean-michel bain-cornu
Le #666223
Bonjour,
Est-ce que quelqu'un a une idée comment passer des paramètres entre les
pages d'un wizard ? Dans l'exemple de wizard
http://wiki.wxpython.org/wxWizard que j'ai repris, les classes pages
sont instanciées à la création du wizard et je ne sait donc pas comment
passer des paramètres en faisant "suivant" et "précédent"


Tu as un événement wiz.EVT_WIZARD_PAGE_CHANGING qui te préviens du
changement de page.
Tu connais le n° de page avec evt.GetPage(), ce qui te permet de savoir
la page où tu es. Après, c'est le système habituel : tu te gardes des
paramètres dans ton objet principal que tu fais évoluer (ou pas) d'une
page à l'autre. Normalement, tu connais les objets métier qui sont dans
les pages, car c'est toi qui les a mis.
Si tu veux t'opposer au changement de page, tu utilises evt.Veto().
De plus, je crois me souvenir que l'exemple de la démo est assez complet.
J'espère que ça réponds à ta question, ce qui n'est pas sûr, car l'idée
de 'passer des paramètres entre les pages' ne me semble pas vraiment
appropriée pour ce que j'imagine que tu veux faire.

Une astuce supplémentaire (c'est mon jour de bonté) : tu peux changer
les textes des boutons standards avec le code suivant :
def OnWizPageChanged(self, evt):
texts= ('&Next >','&Cancel','< &Back','&Finish')
for o in self.wizard.GetChildren():
if 'Button' in str(type(o)):
text= o.GetLabel()
if text in texts:
o.SetLabel('nouveau label...')

A+
jm

BH
Le #666221
Bonjour,
Est-ce que quelqu'un a une idée comment passer des paramètres entre
les pages d'un wizard ? Dans l'exemple de wizard
http://wiki.wxpython.org/wxWizard que j'ai repris, les classes pages
sont instanciées à la création du wizard et je ne sait donc pas
comment passer des paramètres en faisant "suivant" et "précédent"


Tu as un événement wiz.EVT_WIZARD_PAGE_CHANGING qui te préviens du
changement de page.
Tu connais le n° de page avec evt.GetPage(), ce qui te permet de savoir
la page où tu es. Après, c'est le système habituel : tu te gardes des
paramètres dans ton objet principal que tu fais évoluer (ou pas) d'une
page à l'autre. Normalement, tu connais les objets métier qui sont dans
les pages, car c'est toi qui les a mis.
Si tu veux t'opposer au changement de page, tu utilises evt.Veto().
De plus, je crois me souvenir que l'exemple de la démo est assez complet.
J'espère que ça réponds à ta question, ce qui n'est pas sûr, car l'idée
de 'passer des paramètres entre les pages' ne me semble pas vraiment
appropriée pour ce que j'imagine que tu veux faire.

Une astuce supplémentaire (c'est mon jour de bonté) : tu peux changer
les textes des boutons standards avec le code suivant :
def OnWizPageChanged(self, evt):
texts= ('&Next >','&Cancel','< &Back','&Finish')
for o in self.wizard.GetChildren():
if 'Button' in str(type(o)):
text= o.GetLabel()
if text in texts:
o.SetLabel('nouveau label...')

A+
jm


Merci beaucoup, cela m'a éclaircis les idées. Je vais faire quelques
esssais.

A+

Bertrand


BH
Le #654356
Bonjour,
Est-ce que quelqu'un a une idée comment passer des paramètres entre
les pages d'un wizard ? Dans l'exemple de wizard
http://wiki.wxpython.org/wxWizard que j'ai repris, les classes pages
sont instanciées à la création du wizard et je ne sait donc pas
comment passer des paramètres en faisant "suivant" et "précédent"


Tu as un événement wiz.EVT_WIZARD_PAGE_CHANGING qui te préviens du
changement de page.
Tu connais le n° de page avec evt.GetPage(), ce qui te permet de savoir
la page où tu es. Après, c'est le système habituel : tu te gardes des
paramètres dans ton objet principal que tu fais évoluer (ou pas) d'une
page à l'autre. Normalement, tu connais les objets métier qui sont dans
les pages, car c'est toi qui les a mis.
Si tu veux t'opposer au changement de page, tu utilises evt.Veto().
De plus, je crois me souvenir que l'exemple de la démo est assez complet.
J'espère que ça réponds à ta question, ce qui n'est pas sûr, car l'idée
de 'passer des paramètres entre les pages' ne me semble pas vraiment
appropriée pour ce que j'imagine que tu veux faire.

Une astuce supplémentaire (c'est mon jour de bonté) : tu peux changer
les textes des boutons standards avec le code suivant :
def OnWizPageChanged(self, evt):
texts= ('&Next >','&Cancel','< &Back','&Finish')
for o in self.wizard.GetChildren():
if 'Button' in str(type(o)):
text= o.GetLabel()
if text in texts:
o.SetLabel('nouveau label...')

A+
jm
En fait j'avais déplacé les gestionnaires d'événements à un endroit où

ils n'étaient jamais appelés. Maintenant ça marche. C'est effectivement
mon objet principal qui gère le passage de paramètres. Mes pages ne font
que les faire évoluer.

Merci encore pour tout

Bertrand


Amaury Forgeot d'Arc
Le #654354
Une astuce supplémentaire (c'est mon jour de bonté) : tu peux changer
les textes des boutons standards avec le code suivant :
def OnWizPageChanged(self, evt):
texts= ('&Next >','&Cancel','< &Back','&Finish')
for o in self.wizard.GetChildren():
if 'Button' in str(type(o)):
text= o.GetLabel()
if text in texts:
o.SetLabel('nouveau label...')


Je trouve plus joli de l'écrire ainsi:

def OnWizPageChanged(self, evt):
self.wizard.FindWindow(wx.ID_FORWARD ).SetLabel('En avant!')
self.wizard.FindWindow(wx.ID_BACKWARD).SetLabel('En arrière!')
self.wizard.FindWindow(wx.ID_CANCEL ).SetLabel('Quitter')

--
Amaury

jean-michel bain-cornu
Le #654353
Bonjour,
Une astuce supplémentaire (c'est mon jour de bonté) : tu peux changer
les textes des boutons standards avec le code suivant :
def OnWizPageChanged(self, evt):
texts= ('&Next >','&Cancel','< &Back','&Finish')
for o in self.wizard.GetChildren():
if 'Button' in str(type(o)):
text= o.GetLabel()
if text in texts:
o.SetLabel('nouveau label...')


Je trouve plus joli de l'écrire ainsi:

def OnWizPageChanged(self, evt):
self.wizard.FindWindow(wx.ID_FORWARD ).SetLabel('En avant!')
self.wizard.FindWindow(wx.ID_BACKWARD).SetLabel('En arrière!')
self.wizard.FindWindow(wx.ID_CANCEL ).SetLabel('Quitter')



Effectivement, et de beaucoup. Il y avait eu un échange à ce sujet sur
la ml wxpython, mais je n'avais pas corrigé dans mon script...


jean-michel bain-cornu
Le #654352
self.wizard.FindWindow(wx.ID_FORWARD ).SetLabel('En avant!')
self.wizard.FindWindow(wx.ID_BACKWARD).SetLabel('En arrière!')
self.wizard.FindWindow(wx.ID_CANCEL ).SetLabel('Quitter')



En fait, il faut utiliser self.wizard.FindWindowById (en tout cas dans
la version que j'utilise, la 2.6.1, qui n'est certes pas la dernière)

Amaury Forgeot d'Arc
Le #654350
self.wizard.FindWindow(wx.ID_FORWARD ).SetLabel('En avant!')
self.wizard.FindWindow(wx.ID_BACKWARD).SetLabel('En arrière!')
self.wizard.FindWindow(wx.ID_CANCEL ).SetLabel('Quitter')



En fait, il faut utiliser self.wizard.FindWindowById (en tout cas dans
la version que j'utilise, la 2.6.1, qui n'est certes pas la dernière)


Argh! Ce que j'ai copié est directement adapté du C++.
wxPython n'aime pas les fonctions surchagées, et les renomme
systématiquement.
J'aurais dû vérifier avant de poster...

--
Amaury


Publicité
Poster une réponse
Anonyme