从 Tkinter GUI 使用 read_csv 打开和读取 csv 文件 [英] Opening and Reading a csv file using read_csv from Tkinter GUI
问题描述
from tkinter import filedialog, Label, Button, Entry, StringVar
from tkinter.filedialog import askopenfile
import pandas as pd
root = tk.Tk()
Label(root, text='File Path').grid(row=0, column=0)
v = StringVar()
entry = Entry(root, textvariable=v).grid(row=0, column=1)
Button(root, text='Browse Data Set',command=lambda: v.set(askopenfile())).grid(row=1, column=0)
Button(root, text='Close',command=root.quit()).grid(row=1, column=1)
root.file = v.get()
df = pd.read_csv(root.file)
root.mainloop()
我想通过单击按钮打开数据集(CSV 文件)并使用 pd.read_csv()
函数读取它我遇到了一些错误
I want to open a dataset (CSV file) on the click of a button and read it using pd.read_csv()
function i am getting some errors
Traceback (most recent call last):
File "/home/abishek/PycharmProjects/untitled1/temp.py", line 21, in <module>
df = pd.read_csv(root.file)
File "/usr/lib/python3/dist-packages/pandas/io/parsers.py", line 498, in parser_f
return _read(filepath_or_buffer, kwds)
File "/usr/lib/python3/dist-packages/pandas/io/parsers.py", line 275, in _read
parser = TextFileReader(filepath_or_buffer, **kwds)
File "/usr/lib/python3/dist-packages/pandas/io/parsers.py", line 590, in __init__
self._make_engine(self.engine)
File "/usr/lib/python3/dist-packages/pandas/io/parsers.py", line 731, in _make_engine
self._engine = CParserWrapper(self.f, **self.options)
File "/usr/lib/python3/dist-packages/pandas/io/parsers.py", line 1103, in __init__
self._reader = _parser.TextReader(src, **kwds)
File "pandas/parser.pyx", line 353, in pandas.parser.TextReader.__cinit__ (pandas/parser.c:3246)
File "pandas/parser.pyx", line 591, in pandas.parser.TextReader._setup_parser_source (pandas/parser.c:6111)
OSError: File b'' does not exist
Process finished with exit code 1
请帮我解决这个问题,我是 Tkinter 的新手
Please Help me with this one i am new to Tkinter
我已经完成了第一部分,现在还有一个问题
I Have done the first part now i have an other problem
1.我浏览了一个文件2.我将使用 list(df)
获取数据框的列,我希望它在选项菜单中显示它我正在使用以下代码
1.I browsed a file
2.I will get the columns of the data Frame using list(df)
and i wanted it to displayed it in an option menu i am doing it with the following code
import tkinter as tk
from tkinter.filedialog import askopenfilename
import pandas as pd
root = tk.Tk()
v = tk.StringVar(root)
v1 = tk.StringVar(root)
v2 = tk.StringVar(root)
v3 = tk.StringVar(root)
df = pd.DataFrame()
col = []
ss = ['a','b','c','d','e']
def get_data_frame():
global v
global df
global col
file_name = askopenfilename()
v.set(file_name)
df = pd.read_csv(file_name)
col = list(df)
print(col)
def fill():
return list(df)
tk.Label(root, text='File Path').grid(row=0, column=0)
entry = tk.Entry(root, textvariable=v).grid(row=0, column=1)
tk.Button(root, text='Browse Data Set', command=get_data_frame).grid(row=0, column=3)
tk.Label(root, text='Class LabelAttribute').grid(row=1, column=0)
tk.OptionMenu(root,v1,*col).grid(row=1, column=1)
v1.set('Nil')
tk.Label(root, text='Row Counter Attribute').grid(row=2, column=0)
v2.set('Nil')
tk.OptionMenu(root,v2,*col).grid(row=2, column=1)
tk.Button(root, text='Close', command=root.destroy).grid(row=5, column=3)
tk.Entry(root, textvariable=v3).grid(row=6, column=0)
tk.Button(root, text='Setter', command=lambda: v3.set(type(col[0]))).grid(row=6, column=1)
v3.set(col)
root.mainloop()
print(col)
但是python出现以下错误
but python is giving the following error
Traceback (most recent call last):
File "/home/abishek/PycharmProjects/untitled1/GUI.py", line 34, in <module>
tk.OptionMenu(root,v1,*col).grid(row=1, column=1)
TypeError: __init__() missing 1 required positional argument: 'value'
推荐答案
正如@Kevin 所建议的,您需要将一些功能放入按下按钮时调用的函数中.我提供了一个例子(我没有安装熊猫,所以熊猫部分被注释掉了).您还应该使用 askopenfilename 而不是 askopenfile.我还修复了您的关闭按钮,请注意我已将其更改为 root.destroy 并且我没有将 () 放在最后.
As suggested by @Kevin, you need to put some of the functionality in to a function that is called when the button is pressed. I've provided an example (I don't have pandas installed, so the pandas part is commented out). You also should be using askopenfilename not askopenfile. I've also fixed your close button, note I've changed it to root.destroy and I haven't put () at the end.
import tkinter as tk
from tkinter.filedialog import askopenfilename
#import pandas as pd
def import_csv_data():
global v
csv_file_path = askopenfilename()
print(csv_file_path)
v.set(csv_file_path)
#df = pd.read_csv(csv_file_path)
root = tk.Tk()
tk.Label(root, text='File Path').grid(row=0, column=0)
v = tk.StringVar()
entry = tk.Entry(root, textvariable=v).grid(row=0, column=1)
tk.Button(root, text='Browse Data Set',command=import_csv_data).grid(row=1, column=0)
tk.Button(root, text='Close',command=root.destroy).grid(row=1, column=1)
root.mainloop()
这篇关于从 Tkinter GUI 使用 read_csv 打开和读取 csv 文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!