Импорт переменной из другого файла
Не получается присвоить значение переменной из другого файла. Чаще всего предлагали сделать переменную глобальной, но это не помогло. Найти решения не могу, подскажите пожалуйста что я сделал не так:
main:
from tkinter import *
import os
master = Tk()
def return_entry(en):
global content
content = entry.get()
os.system('main1.py')
Label(master, text="Путь: ").grid(row=0, sticky=W)
entry = Entry(master)
entry.grid(row=0, column=1)
entry.bind('<Return>', return_entry)
mainloop()
main1:
import os, csv
from main import *
path = content
filelist = []
with open("files.csv", "w", encoding="utf-8") as f:
for root, dirs, files in os.walk(path):
for file in files:
filelist.append(os.path.join(file))
for name in filelist:
print(name, file=f)
Ошибка:
path = content NameError: name 'content' is not defined
Ответы (1 шт):
mainloop - это "бесконечный" цикл, работающий все время, пока существует окно. Получается, что код модуля main1 начнет выполняться, только когда окно будет закрыто. Причем, код в main1 начнет выполняться независимо от того, было ли что-то введено в текстовое поле или нет.
Но насколько я понимаю вашу задумку, запись в файл вам нужно выполнить после того, как нажата кнопка Enter, значит и вызывать запись нужно из обработчика этого события.
Просто перенесите запись в файл внутрь функции return_entry.
from tkinter import *
import os
master = Tk()
def return_entry(en):
content = entry.get()
path = content
filelist = []
with open("files.csv", "w", encoding="utf-8") as f:
for root, dirs, files in os.walk(path):
for file in files:
filelist.append(os.path.join(file))
for name in filelist:
print(name, file=f)
Label(master, text="Путь: ").grid(row=0, sticky=W)
entry = Entry(master)
entry.grid(row=0, column=1)
entry.bind('<Return>', return_entry)
mainloop()
Если нужно разделить на несколько модулей, то вынесите запись в файл в отдельную функцию, импортируйте ее в модуле main.py и запускайте эту функцию из функции return_entry, при этом модуль main.py будет основным:
# main.py
from tkinter import *
from main1 import write_to_file
master = Tk()
def return_entry(en):
content = entry.get()
write_to_file(content)
Label(master, text="Путь: ").grid(row=0, sticky=W)
entry = Entry(master)
entry.grid(row=0, column=1)
entry.bind('<Return>', return_entry)
mainloop()
# main1.py
import os, csv
def write_to_file(content):
path = content
filelist = []
with open("files.csv", "w", encoding="utf-8") as f:
for root, dirs, files in os.walk(path):
for file in files:
filelist.append(os.path.join(file))
for name in filelist:
print(name, file=f)