如何在类中使用在类中声明的变量?

时间:2011-05-25 09:32:59

标签: python pyqt pyqt4

我在涉及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

在这个类中,变量filename确实包含了正确的目录。 现在我想在这里使用它,外出一个类或def:

wb = xlrd.open_workbook(filename)

这不起作用,给我错误'文件名未定义'

我已经阅读了Python的'全局'命令,它似乎有解决方案,但我似乎无法实现这一点。

任何?

2 个答案:

答案 0 :(得分:6)

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

filename中的变量showDialog被定义为局部变量 - 因此,您无法在此函数外访问它。

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

我假设你有一个类OpenFile的实例,例如:

openfile = OpenFile()

现在,您可以通过调用:

来访问此实例中的变量
openfile.filename

答案 1 :(得分: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类的对象。