[Python / Tkinter] Suche nach Pandas DataFrame → Erstellen Sie ein einfaches Suchformular zur Anzeige

Einführung

Bei der Verwendung von DataFrame gibt es Situationen, in denen ich wünschte, ich könnte es suchen und anzeigen. Dies ist besonders nützlich beim Erstellen von GUI-Apps. Ich möchte unten nach Pandas DataFrame suchen und ein Suchformular erstellen, das mit Tkinter angezeigt werden soll.

Stichprobe

search.gif

Vollständiger Code

import pandas as pd
import tkinter as tk
import tkinter.ttk as ttk


class SearchWindow(tk.Frame):
    def __init__(self, master=None, parent=None):
        super().__init__(master)
        self.master = master
        self.master.geometry("300x300")
        self.master.title("Suchfenster")
        self.pack()
        self.set_data()
        self.create_widgets()

    def set_data(self):
        self.data = pd.read_csv("data.csv", encoding="utf-8")
        self.colname_list = ["Lebensmittelcode", "Name des Lebensmittels"]  #Spaltenname, der in den Suchergebnissen angezeigt werden soll
        self.width_list = [100, 200]
        self.search_col = "Suchbegriff"  # Suchbegriffの入力されている列名

    def create_widgets(self):
        self.pw_main = ttk.PanedWindow(self.master, orient="vertical")
        self.pw_main.pack(expand=True, fill=tk.BOTH, side="left")
        self.pw_top = ttk.PanedWindow(self.pw_main, orient="horizontal", height=25)
        self.pw_main.add(self.pw_top)
        self.pw_bottom = ttk.PanedWindow(self.pw_main, orient="vertical")
        self.pw_main.add(self.pw_bottom)
        self.creat_input_frame(self.pw_top)
        self.create_tree(self.pw_bottom)

    def creat_input_frame(self, parent):
        fm_input = ttk.Frame(parent, )
        parent.add(fm_input)
        lbl_keyword = ttk.Label(fm_input, text="Stichwort", width=7)
        lbl_keyword.grid(row=1, column=1, padx=2, pady=2)
        self.keyword = tk.StringVar()
        ent_keyword = ttk.Entry(fm_input, justify="left", textvariable=self.keyword)
        ent_keyword.grid(row=1, column=2, padx=2, pady=2)
        ent_keyword.bind("<Return>", self.search)

    def create_tree(self, parent):
        self.result_text = tk.StringVar()
        lbl_result = ttk.Label(parent, textvariable=self.result_text)
        parent.add(lbl_result)
        self.tree = ttk.Treeview(parent)
        self.tree["column"] = self.colname_list
        self.tree["show"] = "headings"
        self.tree.bind("<Double-1>", self.onDuble)
        for i, (colname, width) in enumerate(zip(self.colname_list, self.width_list)):
            self.tree.heading(i, text=colname)
            self.tree.column(i, width=width)
        parent.add(self.tree)

    def search(self, event=None):
        keyword = self.keyword.get()
        result = self.data[self.data[self.search_col].str.contains(keyword, na=False)]
        self.update_tree_by_search_result(result)

    def update_tree_by_search_result(self, result):
        self.tree.delete(*self.tree.get_children())
        self.result_text.set(f"Suchergebnisse:{len(result)}")
        for _, row in result.iterrows():
            self.tree.insert("", "end", values=row[self.colname_list].to_list())

    def onDuble(self, event):
        for item in self.tree.selection():
            print(self.tree.item(item)["values"])


def main():
    root = tk.Tk()
    app = SearchWindow(master=root)
    app.mainloop()

if __name__ == "__main__":
    main()

Der Inhalt der gelesenen CSV lautet wie folgt. ::

Lebensmittelcode Lebensmittelname Suchwort
0 1001 Amaranthus / Echtes Amaranthus / Echtes Amaransasu
1 1002 Awa / Weißkorn Awa / Weißkorn Awa
2 1003 Awa / Awamochi Awa / Awamochi Awamochi
3 1004 Enbaku / Otomeal Enbaku / Otomeal Enbaku Otomiru Oto Otsu
4 1005 Gerste / Oshimugi mit sieben Minuten Gerste / Oshimugi mit sieben Minuten Omugi Nanabutsuki Oshimugi

Ein kleiner Kommentar

Text eingeben → Eingabe, um die Suchergebnisse im Baum anzuzeigen.

Die Methoden sind verknüpft, sodass Sie mit der Eingabetaste suchen können. Der folgende Teil:

        ent_keyword.bind("<Return>", self.search)

Die Baumansicht von TTK wird als Widget verwendet, das die Suchergebnisse anzeigt. Ich mag es, weil es einfach in Tabellenform angezeigt werden kann. Wenn search ausgeführt wird, erhält update_tree_by_search_result das Ergebnis. Alle werden vor dem Einfügen in Treeview gelöscht und dann hinzugefügt. Dieser Teil ist der folgende Prozess:

    def search(self, event=None):
        keyword = self.keyword.get()
        result = self.data[self.data[self.search_col].str.contains(keyword, na=False)]
        self.update_tree_by_search_result(result)

    def update_tree_by_search_result(self, result):
        self.tree.delete(*self.tree.get_children())
        self.result_text.set(f"Suchergebnisse:{len(result)}")
        for _, row in result.iterrows():
            self.tree.insert("", "end", values=row[self.colname_list].to_list())

Obwohl im GIF nicht erwähnt, können Sie dieses Suchergebnis auch verwenden. Der folgende Code verknüpft "onDouble" als den Vorgang, wenn auf ein Baumelement doppelklickt wird.

        self.tree.bind("<Double-1>", self.onDuble)

onDouble ist wie folgt. Sie können jetzt den Wert des ausgewählten Elements abrufen.

    def onDuble(self, event):
        for item in self.tree.selection():
            print(self.tree.item(item)["values"])

Recommended Posts

[Python / Tkinter] Suche nach Pandas DataFrame → Erstellen Sie ein einfaches Suchformular zur Anzeige
Python-Pandas: Suchen Sie mit regulären Ausdrücken nach DataFrame
[Python] Erstellen Sie eine Tabelle von Pandas DataFrame zu Postgres
Konvertieren Sie mit Python für .NET von Pandas DataFrame in System.Data.DataTable
Eine einfache Möglichkeit, mehrere for-Schleifen in Python zu vermeiden
[Python Kivy] So erstellen Sie ein einfaches Popup-Fenster
Erstellen Sie mit tkinter eine Python-GUI
Erstellen Sie einen Pandas-Datenrahmen aus einer Zeichenfolge.
5 Möglichkeiten zum Erstellen eines Python-Chatbots
[Python] So fügen Sie einer Tabelle Zeilen und Spalten hinzu (pandas DataFrame)
Python vba zum Erstellen einer Datumszeichenfolge zum Erstellen eines Dateinamens
Erstellen Sie eine einfache GUI-App in Python
Erstellen wir eine virtuelle Umgebung für Python
[Python] Fügen Sie Pandas DataFrame insgesamt Zeilen hinzu
Erstellen Sie mit Pandas einen Datenrahmen aus Excel
[Python] Listenverständnis Verschiedene Möglichkeiten zum Erstellen einer Liste
Bearbeiten Sie Excel in Python, um eine Pivot-Tabelle zu erstellen
Ich möchte eine schöne Python-Entwicklungsumgebung für meinen neuen Mac erstellen
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
[Python] Weg zur Schlange (6) Manipuliere Pandas
Erstellen Sie mit Minette für Python einen LINE BOT
Ich möchte mit Python ein Fenster erstellen
[Python-Pandas] Erstellen Sie einen leeren DataFrame aus einem vorhandenen DataFrame
So erstellen Sie eine JSON-Datei in Python
So fügen Sie einen Suchpfad für Python-Module hinzu
Schritte zum Erstellen eines Twitter-Bots mit Python
Erstellen Sie in Python ein einfaches Momentum-Investmentmodell
Skript zum einfachen Erstellen einer Clientgeräteumgebung für AWS IoT (Python v2-Version)
Erstellen Sie eine einfache API, um JSON-Dateien einzugeben und auszugeben ~ Python / Flask Edition ~
Ich habe versucht, einen Pandas-Datenrahmen zu erstellen, indem ich mit Python Informationen zum Lebensmittelrückruf abgekratzt habe
Erstellen Sie einen Datensatz mit Bildern, die für das Training verwendet werden sollen
Versuchen Sie, mit Tkinter in Python dynamisch einen Checkbutton zu erstellen
[Python] 2 Erstellen Sie eine Risiko-Rendite-Karte für Ihr Asset-Portfolio
Zusammenfassung der Vorverarbeitungsmethoden für Python-Anfänger (Pandas-Datenrahmen)
Erstellen Sie ein Plug-In, um Python Doctest mit Vim (1) auszuführen.
[Einführung in Python] Hochgeschwindigkeits-Einführung in Python für vielbeschäftigte C ++ - Programmierer
So zeigen Sie DataFrame als Tabelle in Markdown an
So erstellen Sie ein lokales Repository für Linux
[Python] Ein Memo zum vertikalen Schreiben von CSV mit Pandas
Erstellen Sie in Docker eine Ebene für AWS Lambda Python
So erstellen Sie ein einfaches TCP-Server / Client-Skript
Python-Skript, das eine JSON-Datei aus einer CSV-Datei erstellt
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
[Python] Erstellen Sie mit cx_Freeze eine Verteilungsdatei für das Tkinter-Programm
Erstellen Sie ein Python-Modul
Erstellen Sie eine Python-Umgebung
Python-Anwendung: Pandas # 3: Dataframe
Erstellt eine Methode zur automatischen Auswahl und Visualisierung eines geeigneten Diagramms für Pandas DataFrame
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
[Python] Wenn Sie plötzlich ein Anfrageformular erstellen möchten
[Python] Erstellen Sie mit tkinter einen Bildschirm zur Datei- und Ordnerpfadspezifikation
Versuchen Sie, verschiedene Informationen anzuzeigen, die für das Debuggen mit Python nützlich sind
Anwendung zum Anzeigen und Durchsuchen lokaler Memos (Tagebuch) in Python
Erstellen Sie einen Mastodon-Bot mit einer Funktion, die automatisch mit Python antwortet
Erstellen Sie ein untergeordnetes Konto für die Verbindung mit Stripe in Python
[Python] Erstellen Sie eine Datums- und Zeitliste für einen bestimmten Zeitraum
So geben Sie das öffentliche Verzeichnis Python Simple HTTP Server an