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

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

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

wb = xlrd.open_workbook(filename)

Это не работает, что дает мне ошибку, что 'filename не определен'

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

Кто-нибудь?

  • 0
    Python не имеет понятия «объявление». Переменные не "объявлены". Пожалуйста, исправьте свое название, чтобы описать, что вы действительно делаете. Вы не можете использовать self для создания переменной экземпляра. Ваш заголовок может выглядеть примерно так: «Как я могу обработать переменную экземпляра, не используя self », поскольку это может быть тем, что пытается сделать ваш код.
Теги:
pyqt4
pyqt

2 ответа

6
Лучший ответ

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

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

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

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

openfile = OpenFile()

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

openfile.filename
  • 0
    Спасибо за ваш быстрый комментарий! Это работает сейчас, и это также упрощает некоторые другие мои программы. Доволен твоим ответом :-D Не подумал бы, что моя проблема на самом деле в этом простаке.
  • 0
    Рад слышать. Как вы видели, чем лучше вы формализовали свою проблему, тем быстрее вы получите ответы - эта проблема была очень хорошо поставлена. Удачного кодирования!
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)

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

  • 0
    Спасибо за ваш ответ, а! Мне нравится скорость, с которой вы ответили!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню