OVH Cloud OVH Cloud

[wxPython][newbe] communication entre fenêtres

4 réponses
Avatar
JB Richet
bonjour,

je me lance en parfait autodidacte sur la programmation fenêtrée, et je
commence avec wxPython. au point où j'en suis (pas très avancé, donc),
je ne vois pas très bien comment faire communiquer une fenêtre fille
avec son parent, voire son grand-parent...

pour l'instant, je passe en argument à mon constructeur l'instance de la
classe qui sert de parent... bref je fait du passage de variable par
argument, genre :

class wxAsssistant(wxWizard):
def _init_ctrls(self, prnt):
[...]
def __init__(self, parent, ori):
self.ori = ori
self._init_ctrls(parent)

ce qui me permet par exemple d'écrire dans la fenêtre de log du parent
[txtLog est un contrôle de type wxTxtCtrl multiligne et en lecture
seule] depuis l'assistant (instance de wxAssistant), genre :
assistant.ori.txtLog.WriteText('étape 3 amorcée')

cela m'amène à des déclarations comme :
assistant = wxAssistant(self,self)
je me dis que ce n'est pas très élégant, ce (self,self). il y a sûrement
moyen de faire autrement, parce que quand le projet se complexifie, ce
genre de pratique doit devenir assez lourdingue, voire ingérable.

Est-ce que les identifiants, ne peuvent pas servir à alléger ces
problèmes de communication, permettant des pratiques plue proches du
passage par adresse ? Parce que je dois avouer ne rien comprendre à ce
que à quoi ils servent et comment on les utilise (a fortiori).

merci de votre aide,

JBR

4 réponses

Avatar
Jacques Pronchery
bonjour,

je me lance en parfait autodidacte sur la programmation fenêtrée, et je
commence avec wxPython. au point où j'en suis (pas très avancé, donc),
je ne vois pas très bien comment faire communiquer une fenêtre fille
avec son parent, voire son grand-parent...

pour l'instant, je passe en argument à mon constructeur l'instance de la
classe qui sert de parent... bref je fait du passage de variable par
argument, genre :

class wxAsssistant(wxWizard):
def _init_ctrls(self, prnt):
[...]
def __init__(self, parent, ori):
self.ori = ori
self._init_ctrls(parent)

ce qui me permet par exemple d'écrire dans la fenêtre de log du parent
[txtLog est un contrôle de type wxTxtCtrl multiligne et en lecture
seule] depuis l'assistant (instance de wxAssistant), genre :
assistant.ori.txtLog.WriteText('étape 3 amorcée')

cela m'amène à des déclarations comme :
assistant = wxAssistant(self,self)
je me dis que ce n'est pas très élégant, ce (self,self). il y a sûrement
moyen de faire autrement, parce que quand le projet se complexifie, ce
genre de pratique doit devenir assez lourdingue, voire ingérable.

Est-ce que les identifiants, ne peuvent pas servir à alléger ces
problèmes de communication, permettant des pratiques plue proches du
passage par adresse ? Parce que je dois avouer ne rien comprendre à ce
que à quoi ils servent et comment on les utilise (a fortiori).

merci de votre aide,

JBR


Bonjour,

Voir wxGetParent() et wxGetGrandParent().
Pour appeler une fonction du parent on a donc :

self.wxGetParent().lafontionduparent()

As-tu récupérer la doc et les exemples et les démos de wxPython
sur le site ? Ils sont très bien faits

Jacques.

Avatar
JB Richet
merci pour ta réponse, mais...

Voir wxGetParent() et wxGetGrandParent().
?? pas trouvé !?

j'utilise python 2.3 avec wxPython 2.4.2.4 sous MS Windows XP, et en
cherchant avec Pydoc ou dans le helper à la sauce windows de wxWindows,
j'ai rien trouvé sur des fonctions wxGetParent.

As-tu récupérer la doc et les exemples et les démos de wxPython
sur le site ? Ils sont très bien faits
je pense que oui, normalement tout est inclus dans les installeurs

win32. je suis tout le temps le nez dedans, navigant entre la démo et
son code, et le helper de wxWindows.

encore merci,
JBR

Avatar
Jacques Pronchery
merci pour ta réponse, mais...


Voir wxGetParent() et wxGetGrandParent().


?? pas trouvé !?
j'utilise python 2.3 avec wxPython 2.4.2.4 sous MS Windows XP, et en
cherchant avec Pydoc ou dans le helper à la sauce windows de wxWindows,
j'ai rien trouvé sur des fonctions wxGetParent.

As-tu récupérer la doc et les exemples et les démos de wxPython
sur le site ? Ils sont très bien faits


je pense que oui, normalement tout est inclus dans les installeurs
win32. je suis tout le temps le nez dedans, navigant entre la démo et
son code, et le helper de wxWindows.

encore merci,
JBR


Ce sont des fonctions de la classe wxWindow.

Effectivement dans la liste des fonctions de ta classe tu ne les as pas.

Tu ne les vois pas dans les classes des fenetres car celles-ci sont des
filles de wxWindow et tu n'as que la liste des fonctions particulières
à la fille. Mais ces filles possédent les caractéristiques de la mère.

Par exemple quand tu regarde les fonctions de wxPanel tu as au début

Derived from
wxWindow
wxEvtHandler
wxObject

Donc wxPanel posséde les caractéristiques des 3 classes désignées.
tu clique sur wxWindow et tu auras la page des fonctions de wxWindow
qui les as données à wxPanel.

Et là tu voit les fonctions que je t'ai indiquées.

Jacques.


Avatar
JB Richet
Ce sont des fonctions de la classe wxWindow.
le test sur lequel je travaille utilise wxWizard. wxWindows fait bien

partie des classes mères, mais tu avais mis un 'wx' de trop...

la commande
assistant.GetParent().txtLog.WriteText('écrit avec GetParent')
donne bien le résultat attendu.

me reste à trouver un éclairage sur les identifiants, mais je vais
lancer un autre fil de discussion la dessus.

merci de ta patience,
JBR