Python Tkinter获取askopenfilename()的结果



我使用Tkinter作为GUI库,我需要通过调用askopenfilename来获取我选择的文件列表。这是我的函数^

def choose_file(file_list)
file_list = fd.askopenfilenames()
file_list = ()
b1 = Button(command = lambda: choose_file(file_list))

file_list -是外部作用域的变量。但是在调用函数之后,这个变量是空的。我做错了什么?

尝试:

import tkinter.filedialog as fd
import tkinter as tk
def choose_file():
global file_list
file_list = fd.askopenfilenames()
file_list = ()
root = tk.Tk()
b1 = tk.Button(root, text="Click me", command=choose_file)
b1.pack()
root.mainloop()

变量file_list不是全局的,因为它是不可变的。要使它成为全局的,您必须在函数定义的开头添加global file_list。要了解更多信息,请阅读:为什么你可以改变不可变,如果它's全局

您的代码中有两个不同的file_list变量。

file_list = ()

和一个函数作用域

def choose_file(file_list):

file_list = fd.askopenfilenames()

您将askopenfilenames返回的列表分配给函数作用域变量-在函数中的任何地方,file_list将具有askopenfilenames的列表作为值,您可以通过两次将print(file_list)添加到函数中看到,一次在开始,一次在结束。

要修改全局变量而不是局部变量,您可以将局部(函数作用域)变量设置为全局

file_list = ()
def choose_file():
global file_list
file_list = fd.askopenfilenames()
b1 = Button(command = choose_file)

其中变量初始化必须在函数声明之前移动(我认为否则它会给出UnboundLocalError或其他东西),lambda可以被删除,并且您不需要将file_list作为参数传递。

最新更新