Я пишу программу Python 3 с Tkinter, которая работает под Windows 8.1.
Мне нужно выбрать две папки, которые будут использоваться вместе в другой функции. В настоящее время у меня есть две кнопки выбора файла, которые открывают диалоговое окно выбора папки:
def select_file_1(self):
global first_file
first_file = filedialog.askdirectory()
def select_file_2(self):
global second_file
second_file = filedialog.askdirectory()
Они работают правильно: всякий раз, когда нажимаются кнопки, он появляется и запрашивает каталог.
Затем есть только один раз, когда используются переменные first_file и second_file, которые я также отмечаю как глобальные переменные перед их использованием. Это когда выбрана другая кнопка:
def create_composite(self):
global first_file
global second_file
f1 = open(first_file, "r")
f2 = open(second_file, "r")
Однако это приводит к следующей ошибке: NameError: name 'first_file' is not defined
при попытке прочитать строку выше, начинающуюся с f1 = open
.
Если это поможет для ясности, вот соответствующая часть моего интерфейса на скриншоте ниже. select_file_1 вызывается щелчком по первому файлу выбора, а select_file_2 вызывается щелчком по второму файлу выбора. Затем вызывается create_composite, щелкнув создать класс.
self
? Какself.first_file
иself.second_file
. (или, возможно, даже простоself.files
) - person Kevin   schedule 09.01.2015global
. Если вы его используете, скорее всего, вам следует реструктурировать свой код. - person Gerrat   schedule 09.01.2015global
:) Не уверен, что это хороший шаблон ... или если синглтоны. - person André Laszlo   schedule 09.01.2015create_composite()
тем же файлом py, что и две функцииselect_file_x()
?global
применяется только к модулю, в котором все находится - Python не имеет действительно глобальных переменных. - person martineau   schedule 09.01.2015FileNotFoundError: [Errno 2] No such file or directory: ''
- person Jake   schedule 09.01.2015first_file
во внешней области видимости. - person Reut Sharabani   schedule 10.01.2015create_composite()
вызывается доselect_file_1()
? Иначеfirst_file
не будет. - person martineau   schedule 10.01.2015create_composite
глобальные объявления не нужны для доступа только для чтения к именам. - person Terry Jan Reedy   schedule 10.01.2015