OVH Cloud OVH Cloud

Incapable de passer une liste d'une classe à l'autre

3 réponses
Avatar
billy_hammer76
Bonjour à tous,

J'éprouve de la difficulté à passer une liste d'une classe à l'autre
sans qu'elle ne s'efface. L'instruction 'print instance1.data' me
donne ce qui a été entré dans le wxTextCtrl. L'instruction 'print
instance2.__getitem__()' me donne une liste vide '[]'. J'imagine que
c'est parce qu'à chaque fois que je crée une nouvelle instance de la
classe Test1, la liste data est redéfinie et donc redevient vide.
Est-ce que quelqu'un peu m'expliquer la stratégie à employer pour
régler mon problème. Je débute en programmation et je suis à court
d'idées. Au bout du compte, ce que je désire accomplir c'est de
réinsérer l'information de ma liste dans le wxTextCtrl avec
l'instruction 'dlg.textTitle.SetValue()'. Ça doit pas être bien
compliqué mais mon cerveau n'est plus qu'une usine à frustration.
Voici ma stratégie qui ne fonctionne pas:



#Nom du fichier:wxDialog2.py

class PageInfo(wxDialog):
.
.
.
self.textTitle = wxTextCtrl(...)
.
.
.
def OnButton1(self, event):

instance1 = Test1()
instance1.data.append(self.textTitle.GetValue())
print instance1.data
self.Close()

class Test1:
def __init__(self):
self.data=[]

def __getitem__(self):
return self.data

-------------------------------------------

import wxDialog2

class Screendt(wxFrame):

def OnMnuFileItems1Menu(self, event):
dlg = wxDialog2.PageInfo(self)
instance2 = wxDialog2.Test1()
print instance2.__getitem__()
try:
#dlg.textTitle.SetValue()
dlg.ShowModal()
finally:
dlg.Destroy()

-------------------------------------------

Merci pour toutes les propositions,

olivier henley

3 réponses

Avatar
Amaury Forgeot d'Arc
Bonjour à tous,

J'éprouve de la difficulté à passer une liste d'une classe à l'autre
sans qu'elle ne s'efface. L'instruction 'print instance1.data' me
donne ce qui a été entré dans le wxTextCtrl. L'instruction 'print
instance2.__getitem__()' me donne une liste vide '[]'. J'imagine que
c'est parce qu'à chaque fois que je crée une nouvelle instance de la
classe Test1, la liste data est redéfinie et donc redevient vide.
Oui.

Est-ce que quelqu'un peu m'expliquer la stratégie à employer pour
régler mon problème. Je débute en programmation et je suis à court
d'idées. Au bout du compte, ce que je désire accomplir c'est de
réinsérer l'information de ma liste dans le wxTextCtrl avec
l'instruction 'dlg.textTitle.SetValue()'.


J'essaierais une solution plus simple, sans classe intermédiaire..
Tant que le wxDialog n'est pas détruit, on peut interroger ses
données même quand il n'est pas en "ShowModal" !

class PageInfo(wxDialog):
....
def OnButton1(self, event):
self.data = self.textTitle.GetValue()
self.Close()


class Screendt(wxFrame):

def OnMnuFileItems1Menu(self, event):
dlg = wxDialog2.PageInfo(self)
data2 = ""
try:
dlg.textTitle.SetValue(data2)
dlg.ShowModal()
data2 = dlg.data
print data2
finally:
dlg.Destroy()

Note: je n'ai pas les moyens de tester ici... Mais en tout cas j'aurais
commencé par ce qui précède.

Bon courage !

Amaury.

Avatar
billy_hammer76
Bonjour Amaury (et cie),

J'ai tenté le code suggéré et ça ne fonctionne pas. Je reçoit un
message d'erreur lorsque je ferme le dialogue PageInfo sans appuyer
sur OnButton1. Si j'appuie sur OnButton1, le message d'erreur
n'apparaît pas et l'instruction 'print data2' n'imprime rien. Voici le
message d'erreur:

Attribute Error: PageInfo instance as no attribute 'data'
... data2 = dlg.data

J'imagine que 'self.data' crée un attribut de la fonction OnButton1 et
pas de PageInfo. Alors comment fait-on pour y accéder. On appelle la
fonction? Si quelqu'un peut prendre le temps de m'expliquer,
j'apprécierais. Merci.

olivier henley



class PageInfo(wxDialog):
....
def OnButton1(self, event):
self.data = self.textTitle.GetValue()
self.Close()


class Screendt(wxFrame):

def OnMnuFileItems1Menu(self, event):
dlg = wxDialog2.PageInfo(self)
data2 = ""
try:
dlg.textTitle.SetValue(data2)
dlg.ShowModal()
data2 = dlg.data #Ça devrait pas aller avant 'SetValue(data2)'?
print data2
finally:
dlg.Destroy()


Avatar
Amaury Forgeot d'Arc
reBonjour,

Bonjour Amaury (et cie),

J'ai tenté le code suggéré et ça ne fonctionne pas. Je reçoit un
message d'erreur lorsque je ferme le dialogue PageInfo sans appuyer
sur OnButton1. Si j'appuie sur OnButton1, le message d'erreur
n'apparaît pas et l'instruction 'print data2' n'imprime rien. Voici le
message d'erreur:

Attribute Error: PageInfo instance as no attribute 'data'
... data2 = dlg.data

J'imagine que 'self.data' crée un attribut de la fonction OnButton1 et
pas de PageInfo. Alors comment fait-on pour y accéder. On appelle la
fonction? Si quelqu'un peut prendre le temps de m'expliquer,
j'apprécierais. Merci.

olivier henley


OnButton1 crée bien l'attribut là où il faut (car le paramètre "self"
désigne l'objet de la classe où est définie la fonction) mais elle ne le
fait que si on appuie sur le bouton...

Il manque en effet une petite ligne dans mon code : celle qui initialise
self.data dans la classe PageInfo dès le début, pour parer à toute
éventualité !

Essaie d'ajouter l'instruction
self.data = ""
dans la fonction __init__ de ta classe PageInfo...

Amaury