2016-11-30 125 views
-1
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()功能,它讀我得到了一些錯誤打開和讀取使用read_csv從Tkinter的GUI

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 
csv文件

請幫我這一次我是新來的Tkinter

我已經完成了第一部分,現在我有另一個問題

1.I瀏覽文件 2.I會使用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) 

這樣做,但蟒蛇是給下面的錯誤

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' 
+2

程序啓動後立即執行'root.mainloop'之前的任何代碼,因此用戶沒有時間將任何數據輸入到Entry中或單擊任何按鈕。 'root.file = v.get()'會爲'root.file'分配一個空字符串。如果您希望在用戶輸入輸入後執行代碼,則需要將其放入函數中,並使用'command ='或'.bind'將其註冊爲回調。 – Kevin

回答

3

由於由@Kevin建議,你需要將一些功能放到一個按下按鈕時調用的函數中。 我提供了一個例子(我沒有安裝熊貓,所以大熊貓的部分被註釋掉了)。 你也應該使用askopenfilename而不是askopenfile。 我也修復了你的關閉按鈕,注意我把它改成了root.destroy,我沒有把()放在最後。

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() 
+0

1.I使用文件對話框讀取文件 2.解析成數據幀 3.現在我想用一個數據幀 的列名的選項菜單代碼請參見問題 請告訴我該怎麼做 –

+0

提出一個新問題。我已經回答了你最初的問題。 – scotty3785

+0

我不能因爲許多倒票而提出新問題 請問您是否將鏈接添加到您的答案 –