如何从GUI中的浏览按钮插入选定的文件路径?

时间:2018-04-02 07:09:49

标签: python tkinter

我是Python GUI创建的新手,我试图从目录中获取.csv文件的文件路径,并将其打印在GUI中的文本框中。我使用tkinter库作为GUI,我似乎无法使其工作。有没有人可以帮我解决这个问题?

import tkinter as tk
from tkinter.filedialog import askopenfilename

def browseFile1():
  global infile1
  infile1=askopenfilename()
  txt1.insert(0.0, infile1)

root = tk.Tk()
root.title("CSV Comparison Tool")
Label = tk.Label(root, text="Select CSV files to compare").grid(row = 1, column = 0, columnspan = 30)
browseButton1 = tk.Button(root,text="Browse", command=browseFile1).grid(row = 2, column = 30)
txt1 = tk.Text(root, width = 100, height = 1).grid(row = 2, column = 0, columnspan = 30)
root.mainloop()

错误说:

AttributeError: 'NoneType' object has no attribute 'insert'

我先尝试了1个按钮然后将它应用到下一个按钮上。我使用spyder作为工具。

谢谢!

1 个答案:

答案 0 :(得分:0)

你的问题是这些问题:

Label = tk.Label(root, text="Select CSV files to compare").grid(row = 1, column = 0, columnspan = 30)
browseButton1 = tk.Button(root,text="Browse", command=browseFile1).grid(row = 2, column = 30)
txt1 = tk.Text(root, width = 100, height = 1).grid(row = 2, column = 0, columnspan = 30)

类似于小部件的grid方法,类似于在Python中改变对象的大多数方法返回None。因此,您只需将None存储在LabelbrowseButton1txt1中。所以当你以后尝试这个时:

txt1.insert(0.0, infile1)

那是试图调用None.insert,这显然不起作用。 Tkinter捕获错误,将其打印到终端,并继续进行,就像从未调用过您的函数一样。

解决方案就是不这样做。相反,这样做:

Label = tk.Label(root, text="Select CSV files to compare")
Label.grid(row = 1, column = 0, columnspan = 30)
browseButton1 = tk.Button(root,text="Browse", command=browseFile1)
browseButton1.grid(row = 2, column = 30)
txt1 = tk.Text(root, width = 100, height = 1)
txt1.grid(row = 2, column = 0, columnspan = 30)

现在,您的代码不仅可以工作,甚至可以适用于典型的编辑器窗口或Stack Overflow页面。