|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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. |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
jean-michel bain-cornu a écrit :
> 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 |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
jean-michel bain-cornu a écrit :
> 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 |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
jean-michel bain-cornu a écrit :
> 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('E n arrière!') self.wizard.FindWindow(wx.ID_CANCEL ).SetLabel('Quitter') -- Amaury |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
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('E n 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... |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
> self.wizard.FindWindow(wx.ID_FORWARD ).SetLabel('En avant!')
> self.wizard.FindWindow(wx.ID_BACKWARD).SetLabel('E n 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) |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
jean-michel bain-cornu a écrit :
>> self.wizard.FindWindow(wx.ID_FORWARD ).SetLabel('En avant!') >> self.wizard.FindWindow(wx.ID_BACKWARD).SetLabel('E n 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 |
|
![]() |
| Outils de la discussion | |
|
|