2017-08-26 3 views
1

Was ich versuche zu erstellen, ist ein Programm, das zuerst einen Pandas Datenrahmen erstellen wird. Dann wird ein Tkinter-Fenster mit einem Eingabefeld, einer Schaltfläche und einem Textfeld erstellt. Für den Code, den ich unten habe, wenn ich die Taste drücke, bekomme ich eine Ausgabe, die den Header des Datenrahmens und die Zeile zeigt, die "durchsucht" wurde.Suchen eines tkinter Datenrahmens

import pandas 
from tkinter import * 
#creates the dataframe 
summer17=pandas.read_excel("summer17.xlsx","list") 

window = Tk() #start of the main window 
#function that will search the dataframe column "company" for any matches 
def search_df(): 
    search_result=summer17[summer17['Company'].str.contains("CAPS")] 
    t1.insert(END,search_result) 
#Creates the entry box 
e1_value=StringVar() 
e1=Entry(window) 
e1.grid(row=0,column=0) 
#Creates a button 
b1=Button(window,width=10,text='search',command=search_df) 
b1.grid(row=0,column=1) 
#Creates a text box 
t1=Text(window,height=5,width=80) 
t1.grid(row=0,column=2) 

window.mainloop() #end of the main window 

Das ist alles und gut funktioniert, aber ich möchte der Benutzer einen Wert in das Eingabefeld eingegeben werden können und die Taste drücken und für diesen Eintrag suchen. Also ändere ich die Funktion zu

def search_df(): 
    search_result=summer17[summer17['Company'].str.contains(e1_value.get())] 
    t1.insert(END,search_result) 

Wenn ich dieses Feld leer lasse, gibt es den gesamten Datenrahmen zurück (wie ich vielleicht oder nicht erwarten kann). Wenn ich jedoch CAPS in das Eingabefeld setze und die Taste drücke, wird immer noch der gesamte Datenrahmen zurückgegeben.

Meine Vermutung ist, dass wenn ich den Wert aus dem Eingabefeld bekomme, gibt es eine Variable Miss Match, aber ich bin mir nicht sicher, wie ich das korrigieren würde.

Antwort

1

Ich habe eine meiner Dateien verwendet, um den Datenrahmen zu erstellen.

müssen Sie den Wert e1_value dem Eintrag hinzufügen, indem Sie den Parameter textvariable verwenden.

Ich habe eine Bindung zwischen der Eingabetaste und Ihrer Funktion hinzugefügt, daher müssen Sie nicht auf die Schaltfläche drücken, sondern stattdessen die Eingabetaste drücken. Um dies zu tun, habe ich die Bindefunktion verwendet. Diese Funktion bindet ein Widget und ein tkinter-Ereignis. Es führt die gewählte Funktion aus und übergibt einen Parameter (der das Ereignis ist).

Der Befehlsparameter der Widgetschaltfläche übergibt jedoch keinen Parameter, wenn er die ausgewählte Funktion ausführt (das Ereignis ist immer ein linker Klick). Aus diesem Grund verwendet Ihre Funktion * event als Parameter, event kann None sein. (Ich habe * Event aber Event = None funktioniert auch, und ich weiß nicht, welcher Weg ist der Pythonal Weg, sorry)

PS: Sie sollten import tkinter as tk verwenden, weil Sie möglicherweise einen Konflikt mit Variablen-und Funktionsnamen haben, wenn Sie verwenden from tkinter import *

import pandas 
import tkinter as tk 
#creates the dataframe 
summer17=pandas.read_csv("User_AD_Commun01_2017-07-26_15-01.csv", 
         sep=";", 
         encoding="latin1") 




window = tk.Tk() #start of the main window 
#function that will search the dataframe column "company" for any matches 


def search_df(*event): 
    search_result=summer17.loc[summer17['company'].str.contains(e1_value.get(), 
           na=False, #ignore the cell's value is Nan 
           case=False)] #case insensitive 
    t1.insert(tk.END,search_result) 


#Creates the entry box and link the e1_value to the variable 
e1_value=tk.StringVar() 
e1=tk.Entry(window, textvariable=e1_value) 
e1.grid(row=0,column=0) 
#execute the search_df function when you hit the "enter" key and put an event 
#parameter 
e1.bind("<Return>", search_df) 

#Creates a button 
b1=tk.Button(window, 
      width=10, 
      text='search', 
      command=search_df) 

b1.grid(row=0,column=1) 

#Creates a text box 
t1=tk.Text(window,height=5,width=80) 
t1.grid(row=0,column=2) 

window.mainloop() #end of the main window 
+0

mein Name ist Name Kolonne Unternehmen und Ihre Spalte Watch out ist Unternehmen –

+1

Dieses ist fantastisch, ich würde nie die * Veranstaltung gedacht haben hinzuzufügen. Ich nehme an, dass Sie das bekommen, wenn Sie sich selbst eine Computersprache beibringen. Auch, danke für das Hinzufügen der Funktion, um nur zu drücken, und die Groß-/Kleinschreibung = False. Das sind einige Funktionen, die ich hinzufügen wollte, aber niedriger auf der Prioritätenliste war. – jon

Verwandte Themen