Transférer une variable entre plusieurs scripts python

Transférer une variable entre plusieurs scripts python - Python - Programmation

Marsh Posté le 24-03-2008 à 08:44:40    

Bonjour tout le monde :-)
 
Je me suis assez récemment mis au Python, mais je programme déjà depuis un certain temps dans d'autres, dont l'ASM, le PHP, Java, scripts shells etc... Et la je tombe sur un os: je n'arrive pas a transferer une information entre plusieurs scripts.
 
En effet, mon application est composée de plusieurs Form faites avec wxWidgets, et j'ai besoin de pouvoir communiquer d'une Form à l'autre, or il semble que cela ne soit pas possible ! J'ai essayé avec des variables globales, ca passe pas. J'ai essayé aussi d'appeler une classe ou fonction de l'autre, ca ne fonctionne que si on vient de créer juste avant la Form dans laquelle se trouve la fonction, car même si elle a déjà été créé auparavant ca ne fonctionne plus (mais c'est peut-etre dû au ramasse-miettes)...
 
Bref si vous avez un code d'exemple ou une piste cela me serait d'un très grand secours :D


Message édité par grosbedo le 24-03-2008 à 09:03:23
Reply

Marsh Posté le 24-03-2008 à 08:44:40   

Reply

Marsh Posté le 24-03-2008 à 14:34:33    

Je n'ai strictement rien compris au problème.

 

Pourrais tu nous donner un cas très simple (de l'ordre de 50 ou 100 lignes de code maximum) montrant le problème que tu as, et expliquant ce que tu voudrais faire? Parce que j'ai l'impression que tu nages dans la confusion.


Message édité par masklinn le 25-03-2008 à 11:55:10

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 27-03-2008 à 16:11:57    

Rebonjour,
Non je ne suis pas confus et je m'attendais à cette réponse, je pensais pourtant m'avoir exprimé clairement. Le problème c'est que mon code est très complexe maintenant donc c'est pas vraiment simple de donner un exemple, m'enfin je vais essayer:
 
Code Form1:
 
form2 = form2.create (self)
 
Code Form2:
 
N'importe quoi etc...
 
Depuis form1, je peux faire form2.fonction(), par contre depuis form2, je peux pas faire form1.fonction() à moins de refaire form1 = form1.create (self), mais ca recree une autre instance de Form1, et ce n'est pas ce que je veux (car premièrement ca consomme des ressources inutiles, et parce que je ne récupère pas les champs créé dans la première instance de Form1).
 
Voila si quelqu'un à une solution ca serait magistral ! :D

Reply

Marsh Posté le 27-03-2008 à 17:02:05    

Elle est créée où, là, ton instance de form1?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 28-03-2008 à 02:39:19    

Tu parles de la toute première instance de form1 ?
Dans le script qui sert de starter, dans une classe BoaApp:
 
class BoaApp(wx.App):
    def OnInit(self):
        wx.InitAllImageHandlers()
        self.main = frSend.create(None)
 
(NB: je ne code pas avec Boa, c'est l'ancien dev qui l'utilisait, je préfère PSPad ou PyScripter).
 
Mais de toutes facons le point de départ n'a pas grande importance puisque ce qui m'interesse c'est de pouvoir passer d'une instance A a B et en retour de B a A. Je crois bien que c'est à cause du handler, mais comment le transférer si les variables globales ne passent pas entre les instances ?


Message édité par grosbedo le 28-03-2008 à 02:40:35
Reply

Marsh Posté le 10-07-2008 à 04:04:58    

Bon depuis le temps j'ai trouvé comment faire. Tout simplement il suffit de passer le parent en parametre, comme cela, on peut accéder à tous les champs et variables du parent dans le script fils. Un exemple:
 

def create(parent):
 return MyDialog(parent)
 
class MyDialog(wx.Dialog):
    def __init__(self, prnt, *args, **kwds):
        global fSend
        fSend = prnt
        # begin wxGlade: MyDialog.__init__
        kwds["style"] = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX|wx.THICK_FRAME
        wx.Dialog.__init__(self, parent=prnt, *args, **kwds)


 
Par contre, il est necessaire de rendre global une variable dans laquelle on stocke la valeur du parent, car sinon la variable prnt est détruite a la fin de init. Et on ne peut rendre globale la variable prnt.
Apres, lorsque l'on a fini, il suffit de rappeler la fenetre fSend depuis le script enfant.
 
Si ca peut servir a quelqu'un...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed