У меня есть эта проблема с проектом, который включает в себя программирование на 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, которая, похоже, имеет решение, но я не могу заставить ее работать.
Кто-нибудь?
Я не буду вдаваться в подробности вашего кода, но буду использовать его только для объяснения основных понятий.
Переменная filename
в showDialog
определяется как локальная переменная - следовательно, вы не можете получить доступ к ней вне этой функции.
Если вы хотите определить переменную как переменную экземпляра для класса OpenFile, вам нужно использовать self.filename
.
Я предполагаю, что у вас есть экземпляр класса OpenFile
, например:
openfile = OpenFile()
Теперь вы можете получить доступ к переменной из этого экземпляра, вызвав:
openfile.filename
Добавьте 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
.
self
для создания переменной экземпляра. Ваш заголовок может выглядеть примерно так: «Как я могу обработать переменную экземпляра, не используяself
», поскольку это может быть тем, что пытается сделать ваш код.