2010-11-21 4 views
2

J'ai un petit module qui crée une fenêtre (programme1). J'ai importé ceci dans un autre programme python (program2).Importer des valeurs en Python

Comment faire pour que le programme 2 obtienne self.x et x dans le programme 1?

Voici le programme1.

import Tkinter 

class Class(Tkinter.Tk): 

    def __init__(self, parent): 

     Tkinter.Tk.__init__(self, parent) 
     self.parent = parent 

     self.Main() 

    def Main(self): 
     self.button= Tkinter.Button(self,text='hello') 
     self.button.pack() 

     self.x = 34 
     x = 62 





def run(): 
    app = Class(None) 
    app.mainloop() 

if __name__ == "__main__": 
    run() 

Répondre

5

Vous pouvez accéder à la self.x variable en tant que membre d'une instance de Class:

c = Class(parent) 
print(c.x) 

Vous ne pouvez pas accéder à la variable locale - il est hors de portée lorsque la fin de l'appel de la méthode.

+0

Avec c = Classe (parent) print (c.x) Je continue d'obtenir l'erreur que le parent n'est pas défini. – rectangletangle

+1

Pourquoi les parents devraient-ils être définis ici? Je pense que vous devriez commencer par des projets python et OO plus basiques. – Falmarri

+0

'c = La classe (parent)' est équivalente à la ligne 'app = Class (None)' dans votre programme1. Ainsi, mettre parent à None devrait fonctionner. –

1

Je ne sais pas exactement ce que le but de « self.x » et « x » sont, mais une chose à noter dans la méthode « principale » de classe de classe

def Main(self): 
     self.button= Tkinter.Button(self,text='hello') 
     self.button.pack() 

     self.x = 34 
     x = 62 

est que « x » et 'self.x' sont deux variables différentes. La variable 'x' est une variable locale pour la méthode 'Main' et 'self.x' est une variable d'instance. Comme l'indique Mark, vous pouvez accéder à la variable d'instance 'self.x' en tant qu'attribut d'une instance de Class, mais la variable de méthode 'x' n'est accessible qu'à partir de la méthode 'Main'. Si vous souhaitez avoir la possibilité d'accéder à la variable de méthode 'x', vous pouvez modifier la signature de la méthode 'Main' comme suit.

def Main(self,x=62): 
    self.button= Tkinter.Button(self,text='hello') 
    self.button.pack() 

    self.x = 34 
    return x 

De cette façon, vous pouvez définir la valeur de la variable de la méthode « x » lorsque vous appelez la méthode « principale » d'une instance de la classe

>> c = Class() 
>> c.Main(4) 
4 

ou tout simplement garder la valeur par défaut

>> c.Main() 
62 

et comme avant, comme Mark dit que vous aurez accès à l'instance variable « self.x »

>> c.x 
34 
Questions connexes