2011-05-25 10 views
1

J'ai ce problème avec un projet qui implique la programmation en Python. J'ai fait cette classe avec laquelle un écran apparaît et me permettant ainsi d'ouvrir un fichier xls. A l'intérieur de cette classe, le répertoire de ce fichier est ensuite placé dans cette variable 'nomfichier'. :>Comment utiliser une variable déclarée dans une classe, en dehors de cette classe?

class OpenFile(QtGui.QMainWindow): 
    def __init__(self): 
    super(OpenFile, self).__init__() 
    self.initUI() 

    def initUI(self): 
    openFile = QtGui.QPushButton('Open Orderpakket', self) 
    openFile.setGeometry(0, 00, 350, 300) 
    openFile.setStatusTip('Open new File') 
    self.connect(openFile, QtCore.SIGNAL('clicked()'), self.showDialog) 
    self.setWindowTitle('Open Orderpakket') 

    def showDialog(self): 
    filename = QtGui.QFileDialog.getOpenFileName(self, 'Open file',r'J:\Integratie Project\Files', "Excel Files (*.xls*.xlsx)") 

    print filename 

À l'intérieur de cette classe, le nom de fichier de variable contient en effet le répertoire correct. Maintenant, je veux l'utiliser ici, outsite une classe ou d'une définition:

wb = xlrd.open_workbook(filename) 

Cela ne fonctionne pas, me donner l'erreur que « le nom de fichier n'est pas défini »

J'ai lu au sujet de la La commande 'globale' de Python qui semble avoir la solution, mais je n'arrive pas à la faire fonctionner.

Quelqu'un?

+0

Python n'a pas de concept de " déclaration". Les variables ne sont pas "déclarées". Veuillez corriger votre titre pour décrire ce que vous ** faites vraiment **. Vous ne parvenez pas à utiliser 'self' pour créer une variable d'instance. Votre titre pourrait être quelque chose comme "Comment puis-je prendre en charge une variable d'instance sans utiliser' self' ", puisque c'est peut-être ce que tente de faire votre code. –

Répondre

6

Je n'entrerai pas dans les détails de votre code, mais l'utiliserai seulement pour expliquer les concepts de base.

La variable filename dans showDialog est définie en tant que variable locale - par conséquent, vous ne pouvez pas y accéder en dehors de cette fonction.

Si vous souhaitez définir la variable comme variable d'instance pour la classe OpenFile, vous devez utiliser self.filename.

Je suppose que vous avez quelque part une instance de la classe OpenFile, tels que:

openfile = OpenFile() 

Maintenant, vous pouvez accéder à la variable de cette instance en invoquant:

openfile.filename 
+0

Thx pour votre commentaire rapide! Cela fonctionne maintenant et cela simplifie aussi certains de mes autres codages. Heureux avec votre réponse :-D Je n'aurais pas pensé que mon problème était en fait cette smimple. –

+0

Super pour entendre. Comme vous l'avez vu, mieux vous formalisez votre problème, plus vite vous obtenez des réponses - ce problème était très bien posé. Codage heureux! – jsalonen

4

Ajouter filename comme un attribut à l'objet de votre classe, à savoir self:

self.filename = QtGui.QFileDialog.getOpenFileName(self, 'Open file',r'J:\Integratie Project\Files', "Excel Files (*.xls *.xlsx)") 

De cette façon, vous pouvez y accéder comme ça:

wb = xlrd.open_workbook(openfile.filename) 

openfile est un objet de OpenFile classe .

+0

Merci pour votre réponse! J'aime la vitesse avec laquelle tu as répondu! –

Questions connexes