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()
函数读取它,但遇到一些错误
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
我已经完成了第一部分,现在我有另一个问题
1.我浏览了一个文件2.我将使用list(df)
获取数据框的列,我希望它在选项菜单中显示它,我使用以下代码完成此操作
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给出了以下错误
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'
4条答案
按热度按时间k2fxgqgv1#
正如@Kevin所建议的,你需要把一些功能放到一个当按钮被按下时调用的函数中。我提供了一个例子(我没有安装panda,所以panda部分被注解掉了)。你也应该使用askopenfilename而不是askopenfile。我还修正了你的关闭按钮,注意我把它改成了root.destroy,并且我没有把()放在结尾。
fae0ux8s2#
在同一函数的下一行中,只需在
df = pd.read_csv(csv_file_path)
之后包含print(df.head())
,您就会得到答案。snz8szmq3#
我相信这个问题已经得到了非常详细的回答,但下面我对什么是不那么花哨、功能相同的方法发表了自己的看法:
zsbz8rwp4#
我在Jupyter笔记本上输入了Jose所写的内容,然后按下shift-enter,什么也没发生,我以为会打开一个对话框。