2011-05-25 103 views
1

我遇到了一个涉及Python编程的项目。 我做了这个类,弹出一个屏幕,让我打开一个xls文件。 在这个类中,这个文件的目录被放到这个变量'filename'中。 :>如何在类之外使用声明的变量?

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 

这个类里面的变量文件名的确在它里面有正确的目录。 现在我想在这里使用它,outsite类或防守力:

wb = xlrd.open_workbook(filename) 

那也不行,给我的错误“的文件名没有定义”

我读过有关似乎有解决方案的Python'全局'命令,但我似乎无法得到这个工作。

有人吗?

+0

Python有没有“的理念:

openfile = OpenFile() 

现在,您可以通过调用该实例访问变量宣言”。变量不被“声明”。请修正您的标题以描述您真正**做的事情。您无法使用'self'来创建实例变量。你的标题可能类似于“我怎样才能在不使用'self'的情况下关注实例变量”,因为这可能是你的代码尝试的。 – 2011-05-25 10:10:20

回答

6

我不会详细介绍你的代码,但只会用它来解释基本概念。

变量filenameshowDialog被定义为局部变量 - 因此,您无法在此函数之外访问它。

如果要将变量定义为OpenFile类的实例变量,则需要使用self.filename

我假设你有地方类OpenFile的实例,如:

openfile.filename 
+0

Thx快速评论! 它现在的作品,它也简化了我的一些其他编码。 满意你的答案:-D 不会认为我的问题实际上是这个sm。。 – 2011-05-25 09:54:51

+0

好听。正如你所看到的,你将问题形式化得越好,得到答案的速度就越快 - 这个问题提出得很好。快乐的编码! – jsalonen 2011-05-25 09:58:27

4

添加filename为你的类的对象的属性,即self

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

这样,您就可以访问它像:

wb = xlrd.open_workbook(openfile.filename) 

其中openfileOpenFile类的对象。

+0

Thx为您的答案也!我喜欢你回答的速度! – 2011-05-25 09:57:57