我一直在尝试使用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()
答案 0 :(得分:2)
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
的任何内容。这可以是数字,字符串或任何其他对象。它甚至可以是类,类型或函数。但是,在这种情况下,您只需使用普通的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()