如何使用 Tkinter 创建文件选择器?
How do I create a file chooser using Tkinter?
我一直在尝试使用 Tkinter 创建文件选择器。我想让它在按下 "select file" 按钮时发生。但是,问题是它会自动打开,而不是在单击按钮后打开 GUI 然后创建文件目录 window。我没有正确创建它吗?
#Creates the Top button/label to select the file
this.l5 = Label(this.root,text = "Boxes File:").grid(row = 0, column = 0)
this.filename = StringVar()
this.e3 = Entry(this.root,textvariable = this.filename)
this.button3 = Button(this.root,text = "Select File",command=filedialog.askopenfilename()).grid(row = 0, column = 7)
mainloop()
- 技术上没有要求,但您应该使用标准
self
而不是 this
。
- 类似
a = Button(root).grid()
的东西将grid()
的结果保存到a
,所以现在a
将指向None
。首先创建并分配小部件,然后在单独的语句中调用几何管理器(grid()
,等等)。
- 小部件的
command
是小部件将在请求时调用的函数。假设我们已经定义了 def search_for_foo(): ...
。现在 search_for_foo
是一个函数。 search_for_foo()
是 search_for_foo
编程为 return
的内容。这可以是数字、字符串或任何其他对象。它甚至可以是 class、类型或函数。但是,在这种情况下,您只需使用普通的 command=filedialog.askopenfilename
。如果您需要将参数传递给小部件的回调函数,有多种方法可以做到。
更改button3的命令属性。它对我有用。
#Creates the Top button/label to select the file
this.l5 = Label(this.root,text = "Boxes File:").grid(row = 0, column = 0)
this.filename = StringVar()
this.e3 = Entry(this.root,textvariable = this.filename)
# Insert "lambda:" before the function
this.button3 = Button(this.root,text = "Select
File",command=lambda:filedialog.askopenfilename()).grid(row = 0, column = 7)
mainloop()
我一直在尝试使用 Tkinter 创建文件选择器。我想让它在按下 "select file" 按钮时发生。但是,问题是它会自动打开,而不是在单击按钮后打开 GUI 然后创建文件目录 window。我没有正确创建它吗?
#Creates the Top button/label to select the file
this.l5 = Label(this.root,text = "Boxes File:").grid(row = 0, column = 0)
this.filename = StringVar()
this.e3 = Entry(this.root,textvariable = this.filename)
this.button3 = Button(this.root,text = "Select File",command=filedialog.askopenfilename()).grid(row = 0, column = 7)
mainloop()
- 技术上没有要求,但您应该使用标准
self
而不是this
。 - 类似
a = Button(root).grid()
的东西将grid()
的结果保存到a
,所以现在a
将指向None
。首先创建并分配小部件,然后在单独的语句中调用几何管理器(grid()
,等等)。 - 小部件的
command
是小部件将在请求时调用的函数。假设我们已经定义了def search_for_foo(): ...
。现在search_for_foo
是一个函数。search_for_foo()
是search_for_foo
编程为return
的内容。这可以是数字、字符串或任何其他对象。它甚至可以是 class、类型或函数。但是,在这种情况下,您只需使用普通的command=filedialog.askopenfilename
。如果您需要将参数传递给小部件的回调函数,有多种方法可以做到。
更改button3的命令属性。它对我有用。
#Creates the Top button/label to select the file
this.l5 = Label(this.root,text = "Boxes File:").grid(row = 0, column = 0)
this.filename = StringVar()
this.e3 = Entry(this.root,textvariable = this.filename)
# Insert "lambda:" before the function
this.button3 = Button(this.root,text = "Select
File",command=lambda:filedialog.askopenfilename()).grid(row = 0, column = 7)
mainloop()