Как использовать переменную, объявленную внутри класса, вне этого класса? - PullRequest
1 голос
/ 25 мая 2011

У меня проблема с проектом, который включает программирование на Python. Я сделал этот класс, с помощью которого появляется экран, позволяющий мне открыть файл xls. Внутри этого класса каталог к ​​этому файлу затем помещается в эту переменную «имя файла». :>

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 действительно имеет правильный каталог внутри. Теперь я хочу использовать это здесь, вне класса или определения:

wb = xlrd.open_workbook(filename)

Это не работает, из-за чего появляется ошибка "имя файла не определено"

Я читал о «глобальной» команде Python, которая, кажется, имеет решение, но я не могу заставить это работать.

Любой

Ответы [ 2 ]

6 голосов
/ 25 мая 2011

Я не буду вдаваться в детали вашего кода, но буду использовать его только для объяснения основных понятий.

Переменная filename в showDialog определена как локальная переменная - следовательно, вы не можете получить к ней доступ вне этой функции.

Если вы хотите определить переменную как переменную экземпляра для класса OpenFile, вам нужно использовать self.filename.

Я предполагаю, что у вас есть где-нибудь экземпляр класса OpenFile, такой как:

openfile = OpenFile()

Теперь вы можете получить доступ к переменной из этого экземпляра, вызвав:

openfile.filename
4 голосов
/ 25 мая 2011

Добавьте 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)

, где openfile - объект класса OpenFile.

...