Пиша програма на 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