Получить имя файла в Tkinter и вывести его имя

программа должна создавать окно, в нем по центру кнопка, при нажатии на нее открывается окно выбора файла, и после выбора название файла должно быть написано внизу под кнопкой. ни как не могу сделат ьпоследнюю часть, название выводит только в консоли, попытка вывести filename из функции приводит к ошибке.

import tkinter as tk
from tkinter import filedialog
from tkinter.constants import CENTER
from tkinter.filedialog import askopenfilename

def UploadAction(event=None):
    filename = filedialog.askopenfilename()
    print('Selected:', filename)

root= tk.Tk()

canvas1 = tk.Canvas(root, width = 300, height = 300)
canvas1.pack()
    
button1 = tk.Button(text='Click Me',command=UploadAction, bg='brown',fg='white')
canvas1.create_window(150, 150, window=button1)
button1.place (relx = 0.5, rely = 0.5, anchor=CENTER)
canvas1.create_text(relx = 0.5, rely = 0.7, anchor=CENTER, text= filename, fill="black", font=('Helvetica 15 bold'))

root.mainloop() 

Ответы (1 шт):

Автор решения: whatgenius

Вы сейчас выводите результат в консоль, потому что print() выводит в консоль.
Чтобы вывести результат под кнопкой, вам нужна область под кнопкой, в которую вы будете это делать (посмотрите какие есть варианты в tkinter'е и выберите наиболее подходящий).

Вот пример, но с выводом результата в button1 из вашего кода:

def UploadAction(event=None):
    filename = filedialog.askopenfilename()
    button1['text'] = f'Selected: {filename}'


if name == '__main__':
    root= tk.Tk()

    canvas1 = tk.Canvas(root, width = 300, height = 300)
    canvas1.pack()
    
    button1 = tk.Button(text='Click Me',command=UploadAction, bg='brown',fg='white')
    canvas1.create_window(150, 150, window=button1)
    button1.place (relx = 0.5, rely = 0.5, anchor=CENTER)
    canvas1.create_text(relx = 0.5, rely = 0.7, anchor=CENTER, text= filename, 
    fill="black", font=('Helvetica 15 bold'))

    root.mainloop() 
→ Ссылка