Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

wxPython

7 réponses
Avatar
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.

7 réponses

Avatar
jean-michel bain-cornu
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

Avatar
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"


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


Avatar
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"


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


Avatar
Amaury Forgeot d'Arc
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

Avatar
jean-michel bain-cornu
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...


Avatar
jean-michel bain-cornu
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)

Avatar
Amaury Forgeot d'Arc
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