Interaction entre classes. Utilisation du "self"
Développeuses, Développeurs, bonjour !
encore un problème avec "self" en tentant de passer une variable d'une classe à une autre.
Comment actualiser la fenêtre principale "uiClass" avec les données d'une sous-fenêtre "ClassPref" ?
Le code épuré:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| # La fenetre principale
class uiClass :
def __init__ ( self, ... ) :
# Champ texte
self.ch_dest = tk.Text ( self.frame, ... )
# Menu depuis lequel on lance la sous-fenetre (Preferences)
menuChoix.add_command ( label='Preferences', self.lance_pref () )
def lance_pref ( self ) :
# instance de la sous-fenetre (Preferences)
inst_ClassPref = ClassPref ()
def ch_actualisation ( self ) :
# Ici la recuperation des donnees creees dans ClassPref
# insertion de ces donnees dans le champ texte ch_dest
self.ch_dest.insert ( 1.0, ClassPref.passer_pref_on_ok () )
# La sous-fenetre: Classe des Preferences
class ClassPref ( tk.Toplevel ) :
def __init__ ( self, parent=uiClass ):
self.parent = parent
self.btn = tk.Button ( ... , command = self.passer_pref_on_ok () )
def passer_pref_on_ok ( self ) :
self.new_text = "du texte"
# lance l actualisation de la fenetre principale (uiClass)
self.parent.ch_actualisation ( self.parent )
return ( self.new_text ) |
Message d'erreur:
Code:
1 2 3 4 5 6 7 8 9
| Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python32\lib\tkinter\__init__.py", line 1456, in __call__
return self.func(*args)
File "C:/Python32/MES_PROGS/lettre10_python3_8.py", line 527, in passer_pref_on_ok
self.parent.ch_actualisation ( self.parent )
File "C:/Python32/MES_PROGS/lettre10_python3_8.py", line 389, in ch_actualisation
self.ch_dest.insert ( 1.0, ClassPref.passer_pref_on_ok () )
AttributeError: type object 'uiClass' has no attribute 'ch_dest' |
Comment se fait-il que l'instance de uiClass ne reconnaisse plus son champs défini dans son __init__ ?
Je ne dois pas encore bien saisir l'histoire du "self" ...
Merci pour toute info !