Я пытаюсь создать простой графический интерфейс с tkinter, который позволяет пользователям выбирать файл, используя окно браузера файлов, которое будет входом для другого скрипта на python.Я хотел бы иметь виджет Entry, который позволяет пользователю вводить путь к файлу вручную.Если пользователь решит выбрать файл из браузера, а не набирать его, я бы хотел, чтобы на виджете «Ввод» отображался выбранный путь к файлу.
Приведенный ниже код может создать форму (я не отформатировалвиджетов очень много) и выводится диалоговое окно файла.С помощью функции 'show_file_browser' я могу вернуть полный путь к файлу.У меня возникла проблема с вставкой этого пути к файлу в виджет «Запись».
В настоящее время я получаю сообщение об ошибке:
NameError: name 'filepath' is not defined
Эта ошибка возникает из функции first_browser.Поскольку 'filepath' объявлен в функции 'init_window', он не определен, когда я пытаюсь установить его в 'first_browser'.Если не считать 'filepath' глобальной переменной (которая, я не уверен, исправит проблему), есть ли простой способ выполнить задачу, которую я пытаюсь выполнить?
import tkinter as tk
from tkinter import filedialog
class Window(tk.Frame):
def __init__(self, master = None):
tk.Frame.__init__(self, master)
self.master = master
self.init_window()
def init_window(self):
self.master.title("Form Title")
self.pack(fill = 'both', expand = 1)
filepath = tk.StringVar()
quitButton = tk.Button(self, text = 'Quit',
command = self.close_window)
quitButton.place(x = 0, y = 0)
browseButton = tk.Button(self, text = 'Browse',
command = self.first_browser)
browseButton.place(x = 0, y = 30)
filepathText = tk.Entry(self, textvariable = filepath)
filepathText.pack()
def close_window(self):
form.destroy()
def show_file_browser(self):
self.filename = filedialog.askopenfilename()
return self.filename
def first_browser(self):
filepath.set = self.show_file_browser()
form = tk.Tk()
form.geometry("250x250")
form.resizable(0, 0)
app = Window(form)
form.mainloop()