Как перенести функцию из одного файла в другой если в функции используются переменные из другого файла?
К примеру. У меня есть файл test.py с данным кодом.
from test1 import Func
from tkinter import *
root = Tk()
ent = Entry()
but = Button(text='YES', command=Func())
ent.grid()
but.grid()
root.mainloop()
И второй файл с функцией - test1.py
def Func():
text = ent.get()
print(text)
при запуске программы выводит ошибка, что переменной ent в файле test1.py не существует. При попытке передать переменную ent из файла test.py в файл test1.py в качестве аргумента то он сразу запускает функцию.
Ответы (3 шт):
Всё просто! Похоже ты создаешь функцию в новом файле. Зачем? Ты можешь оставить функцию в основном файле и использовать её во втором благодаря import.
Чтоб можно было передать параметр, но при этом не вызывать функцию можно сделать связывание параметра:
# test.py
from functools import partial
but = Button(text='YES', command=partial(Func, ent))
# test1.py
def Func(ent):
text = ent.get()
print(text)
Конструкция partial(Func, ent) создает новую функцию, которая уже не содержит параметров, а при вызове запустит Func(ent), т.е. приблизительно такую:
def tempFunc():
return Func(ent)
Может поздновато, но может кто то столкнулся с такой же проблемой. покажу на своем примере. у меня есть
папка_1
папка_2
папка_с_файлом_1
файл_с_кодом
папка_с_файлом_2
файл_с_классом
файл_с_классом
from tkinter import *
class Window(Tk):
def __init__(self):
super().__init__()
файл_с_кодом
from папка_1.папка_2.папка_с_файлом_2.файл_с_классом import Window
handle = Window()
handle.title('Daw')
handle.geometry('1280x720')
handle.mainloop()
Как видно на примере, нужно написать полный путь через .
То есть написать
from папка_2.папка_с_файлом_2.файл_с_классом import Window
не достаточно! Нужно написать полный путь от проекта:
from папка_1.папка_2.папка_с_файлом_2.файл_с_классом import Window