Bonjour,
J'ai une application avec plusieurs fenetres.
J'essaye d'arranger le code pour que les elements identiques soit centraliser dans un module commun que je charge pour chaque fenetre.
Pour les elements graphiques il n'y a aucun soucis cela se passe sans erreur.
Pour les boutons, j'ai des soucis sur l'Event. Si je declare l'event dans la classe de ma fenetre il n'y a aucun probleme dans la def j'ai acces aux attributs.
Par contre si je "sort" la def de l'event, de la classe de la fenetre, j'ai une erreur AttributeError sur les elements.
Voici un extrait du code:
Classe de la fenetre module VI_Listes.py:
Module Fenetre.py:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class Fen_Listes(wx.Frame): ... def __init__(self, parent, id, titre): wx.Frame.__init__(self, parent, id, titre, size=wx.Size(800, 600), style=wx.RAISED_BORDER) Fenetre.elHaut(self, "fenliste") ... Fenetre.elBas(self, "fenliste") global Lafen Lafen = self
Module FuncGen.py:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 def elHaut(self): ... self.BtnQuit = wx.Button(self, wx.ID_ANY, 'Exit') self.BtnQuit.Bind(wx.EVT_BUTTON, FuncGen.evtBtnQuit(self))
J'utilise pycharm et voici le message d'erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 def evtBtnQuit(self): if VI_Listes.Lafen.marche != 1: ...
File "E:/dev/vi - Copie/vi.py", line 153, in Liste_Choix
self.dlg = Fen_Listes(self, wx.ID_ANY, "Listes Choix")
File "E:\dev\vi - Copie\VI_Listes.py", line 168, in __init__
Fenetre.elHaut(self)
File "E:\dev\vi - Copie\Fenetre.py", line 152, in elHaut
self.BtnQuit.Bind(wx.EVT_BUTTON, FuncGen.evtBtnQuit(self))
File "E:\dev\vi - Copie\FuncGen.py", line 63, in evtBtnQuit
if VI_Listes.Lafen.marche != 1:
AttributeError: module 'VI_Listes' has no attribute 'Lafen'
Je pense que le probleme est une question de porte de variable dans la classe fenetre.
Il y a tres certainement un probleme d'ecriture et je devrais sans doute creer une classe de fenetre de base et ensuite creer des classes herite. Je ne me suis pas encore penche sur la question pour eviter de reecrire le code. Est-ce que je ne pourrais pas "contourner" le probleme pour que la def puisse acceder aux elements de la fenetre? Ou peut-etre puis-je decomposer ma classe dans plusieurs modules dont certain commun a plusieurs classe sans passer par l'heritage ?
Merci pour vos conseils et votre aide.
(excusez moi pour l'absence de caractere accentue, je suis en clavier qwerty)
Partager