我是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作为工具。
谢谢!
答案 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
存储在Label
,browseButton1
和txt1
中。所以当你以后尝试这个时:
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页面。