2016-11-30 21 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() 

ich einen Datensatz (CSV-Datei) auf dem Klick auf eine Schaltfläche öffnen möchten, und lesen Sie es mit pd.read_csv() Funktion ich einige Fehler bin immerÖffnen und eine CSV-Datei von Tkinter GUI read_csv Lesen

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 

Bitte helfen Sie mir mit diesem: ich bin

tkinter ich den ersten Teil getan haben jetzt habe ich ein anderes Problem

1.Ich eine Datei durchsucht 2.I wird erhält die Spalten des Datenrahmen list(df) mit und ich wollte es angezeigt, um es in einem Optionsmenü ich es mit dem folgenden Code tue

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) 

aber Python wird folgenden Fehler

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

jeder Code, bevor 'root.mainloop' kommt führt sofort nach dem Start des Programms, so dass der Benutzer hat keinerlei Zeitdaten in den Entry einzugeben oder Ihre Schaltflächen klicken. 'root.file = v.get()' weist 'root.file' einen leeren String zu. Wenn Sie möchten, dass Code ausgeführt wird, nachdem der Benutzer die Eingabe eingegeben hat, müssen Sie ihn in eine Funktion einfügen und ihn als Callback mit 'command =' oder '.bind' registrieren. – Kevin

Antwort

3

Wie geben Von @Kevin vorgeschlagen, müssen Sie einen Teil der Funktionalität in eine Funktion einfügen, die beim Drücken der Taste aufgerufen wird. Ich habe ein Beispiel zur Verfügung gestellt (Ich habe keine Pandas installiert, so dass der Pandas Teil auskommentiert ist). Sie sollten auch askopenfilename nicht askopenfile verwenden. Ich habe auch Ihre Schließen-Schaltfläche behoben, beachten Sie, ich habe es in root.destroy geändert und ich habe nicht() am Ende gesetzt.

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.Ich lesen eine Datei Datei-Dialog mit 2. es in Datenrahmen analysiert 3. Nun möchte ich ein Optionsmenü mit den Spaltennamen eines Datenrahmens die Frage Siehe für den Code Bitte sagen Sie mir, wie es zu tun –

+0

Erhebe eine neue Frage. Ich habe bereits beantwortet, was Sie ursprünglich gefragt haben. – scotty3785

+0

Ich kann keine neuen Fragen wegen vieler Down-Stimmen stellen Fügen Sie bitte den Link zu Ihrer Antwort –