2014-10-24 1 views
0

У меня есть код:Используйте выбранный пользователем путь к файлу на протяжении всего моего кода

def mnuRead(self, event): 
    global fn 

    dialog = wx.FileDialog(None, "Choose a file", os.getcwd(), "", "*.*", wx.OPEN) 

    if dialog.ShowModal() == wx.ID_OK: 
     countrylist = [] 

     fn = dialog.GetPath() 
     fh = open(fn, "r") 
     csv_fh = csv.reader(fh) 
     for row in csv_fh: 
      countrylist.append(row) 
     fh.close() 
     for rows in countrylist: 
      self.myListCtrl.Append(rows) 

def btnHDI(self, event): 

    myfile = open(fn, "rb") 
    wx.MessageBox(fn) 
    countries = [] 

Мой mnuRead метод позволяет пользователю открыть файл по своему выбору. Я хочу использовать строку этого пути в методе btnHDI ниже.

Значение переменной fn в глобальном масштабе дает мне синтаксическую ошибку. Как использовать этот путь в других методах?

ответ

0

global только для Объявление одно или несколько имен как глобальное.

Вы должны переместить назначение fn = dialog.GetPath() в строке ниже:

global fn 
fn = dialog.GetPath() 

Кроме того, это обычная практика, чтобы положить глобальные декларации в начале функции:

def mnuRead(self, event): 
    global fn 

Это Кстати, они легко видны.

+0

В моем отредактированном коде выше, я все еще получаю сообщение об ошибке, что «fn» является неопределенным именем в моем методе «btnHDI». Почему это? –

+0

@PhilipMcQuitty - Вы как-то называете 'btnHDI' перед' mnuRead'? Когда вы вызываете 'mnuRead',' fn' становится глобальным и должен быть доступен для всех других функций. – iCodez

+0

@PhilipMcQuitty - Другая возможность заключается в том, что 'if dialog.ShowModal() == wx.ID_OK:' оценивает значение 'False', так что' fn' никогда не устанавливается. – iCodez