如何使用Tkinter创建文件选择器?

时间:2015-06-18 23:05:10

标签: python user-interface button tkinter filechooser

我一直在尝试使用Tkinter创建文件选择器。我希望在"选择文件"按下按钮。但问题是,它会自动打开,而不是打开GUI,然后在单击按钮后创建文件目录窗口。我没有正确创造它吗?

#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()

2 个答案:

答案 0 :(得分:2)

  1. 从技术上讲,这不是必需的,但您应该使用标准self代替this
  2. a = Button(root).grid()之类的内容会将grid()的结果保存到a,因此现在a会指向None。首先创建并分配小部件,然后在单独的语句中调用几何管理器(grid()等)。
  3. 窗口小部件command是窗口小部件在请求时将调用的函数。假设我们定义了def search_for_foo(): ...。现在search_for_foo是一个函数。 search_for_foo()search_for_foo被编程为return的任何内容。这可以是数字,字符串或任何其他对象。它甚至可以是类,类型或函数。但是,在这种情况下,您只需使用普通的command=filedialog.askopenfilename。如果你需要将一个参数传递给widget的回调函数,那么就有办法做到这一点。

答案 1 :(得分:0)

更改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()