Я делаю проект, в котором мне нужно реализовать кнопку просмотра папки, а затем поместить этот путь к файлу в другую функцию. Я сделал функцию, которая запрашивает у меня каталог и возвращает путь. но проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я вызываю функцию, окно также открывается для меня, чтобы снова выбрать путь. как я могу сохранить путь в переменной, не вызывая функцию askdirectory()?
Вот мой код:
from tkinter import *
from tkinter import filedialog
import tkinter as tk
full = tk.Tk()
full.geometry("400x200")
name = Label(full, text = "Enter Image Directory").place(x = 5,y = 30)
def askDir():
file = filedialog.askdirectory()
return file
dir = askDir() # doing this will always trigger the askdirectory function.
print (dir)
Button(full,text = "Browse",command = lambda:askDir(),padx=50).place(x = 140, y = 30)
# i only want the function to be triggered when i press the button
full.mainloop()
Я ожидаю, что когда я нажму кнопку, я получу приглашение выбрать каталог, и после выбора пути он должен быть сохранен в переменной, которую я могу использовать в другой функции.
Просто и понятно: функции, вызываемые из событий, не могут возвращать элементы. Или, точнее, все, что они возвращают, игнорируется. Это фундаментальная особенность почти всех инструментов GUI.
используйте код ниже:
from tkinter import *
from tkinter import filedialog
import tkinter as tk
full = tk.Tk()
full.geometry("400x200")
name = Label(full, text = "Enter Image Directory").place(x = 5,y = 30)
dir=None
def askDir():
global dir
dir = filedialog.askdirectory()
test()
def test():
print(dir)
Button(full,text = "Browse",command = lambda:askDir(),padx=50).place(x = 140, y = 30)
full.mainloop()
просто определите (dir) как глобальную переменную. теперь вы можете использовать (dir) в любой функции, которую хотите.
радоваться, веселиться :)
Измените
dir = askDir()
наdir = None
и обновитеdir
внутриaskDir()
, обратите внимание, что вам нужно добавитьglobal dir
в началеaskDir()
.