【问题标题】:Get file name in Tkinter and display it after chosing在Tkinter中获取文件名并选择后显示
【发布时间】:2021-11-22 08:42:31
【问题描述】:

程序应该创建一个窗口,在中心放置一个按钮。当按下按钮打开一个需要选择文件的系统窗口时,应在按钮下方写入文件名。我在最后一部分遇到了问题,文件名仅显示在控制台上,试图让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()  

【问题讨论】:

  • 一种解决方案将filename 设为全局(来源:w3schools.com/python/python_variables_global.asp
  • button1.place(...) 在使用canvas1.create_window(...)button1 放入画布后不应执行。执行canvas1.create_text(..., text=filename, ...) 时,filename 也未定义。

标签: python python-3.x tkinter


【解决方案1】:

您似乎正在尝试在画布上显示文本,但有一种更简单的方法是使用标签并更改其文本:

import tkinter as tk
from tkinter.filedialog import askopenfilename

filename = None
def UploadAction(event=None):
    filename = askopenfilename()
    print('Selected:', filename)
    # Change text of label
    label1['text'] = filename

root= tk.Tk()
    
button1 = tk.Button(text='Click Me', command=UploadAction, bg='brown', fg='white')
button1.pack(padx=2, pady=5)
label1 = tk.Label(text='Please choose a file')
label1.pack(padx=2, pady=2)

root.mainloop()

如果您只想显示文件名:

import tkinter as tk
from tkinter.filedialog import askopenfilename

filename = None
def UploadAction(event=None):
    filename = askopenfilename()
    # Cut path to the file off
    filename = filename.split('/')[len(filename.split('/'))-1]
    print('Selected:', filename)
    label1['text'] = filename

root= tk.Tk()
    
button1 = tk.Button(text='Click Me', command=UploadAction, bg='brown', fg='white')
button1.pack(padx=2, pady=5)
label1 = tk.Label(text='Please choose a file')
label1.pack(padx=2, pady=2)

root.mainloop()

【讨论】:

    猜你喜欢
    • 2016-10-09
    • 2019-10-08
    • 2016-03-17
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2012-09-04
    • 2017-02-10
    • 2022-08-10
    相关资源
    最近更新 更多