TkinterundDataframe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Diego33390
User
Beiträge: 1
Registriert: Sonntag 26. Januar 2020, 12:07

Hallo ihr lieben,

ich versuche gerade eine GUI zu programmieren, die eine Excel file ausliest und jene Zeilen ausgeben soll, welche in eine Zelle ein Substring beinhalten. Beispiel: Name Adresse Alter Schlüssel
Dino Berlin 28 bj2
Az!Dino 2 Leipzig 10 bj2
Ostracode Leipzig 400 bj1

nun möchte ich z.B. wenn ich in der GUI HUB unter Name: Dino eingebe, mir zeile 0 und 1 ausgegeben werden, (diesen Schritt bekomme ich nicht hin) jene Zeilen werden mit dann im interface angezeigt und nun will ich das neu erhaltene Dataframe als excel file abspeichern.
Mein code sieht folgendermaßen aus:

Code: Alles auswählen

import pandas as pd
import numpy as np
import tkinter as tk
from tkinter import filedialog
import os
def test_function1(x1):
    
    
    df=pd.read_excel('ta_test.xlsx')
    x=df[df['Schlüssel'].str.contains(str(x1), regex=False)]
    #x=df.loc[df['Schlüssel'] == str(x1)]
    label['text']=x
    current_directory = filedialog.askdirectory()
    file_name = x.to_excel("output.xlsx")

    file_path = os.path.join(current_directory,file_name)
def test_function2(x1):
    
    
    df=pd.read_excel('ta_test.xlsx')
    
    x=df.loc[df['Name'] == str(x1)]
    label['text']=x
    return x
def test_function3(x1):
    
    
    df=pd.read_excel('ta_test.xlsx')
    
    x=df.loc[df['Ort'] == str(x1)]
    label['text']=x
    return x



root=tk.Tk()
canvas=tk.Canvas(root,width=700,height=700)
canvas.pack()
frame_1=tk.Frame(root,bg='#4287f5')
frame_1.place(relx=0.1,rely=0.1,relwidth=0.8,relheight=0.6)

frame_2=tk.Frame(root,bg='#42f5e3')
frame_2.place(relx=0.1,rely=0.4,relwidth=0.8,relheight=0.2)

entry1=tk.Entry(frame_1,font=60)
entry1.pack()
entry2=tk.Entry(frame_1,font=40)
entry2.pack()
entry3=tk.Entry(frame_1,font=20)
entry3.pack()
label=tk.Label(frame_2,text='Result \n \n',bg='yellow')
label.place(relx=0.3,rely=0,relwidth=0.8,relheight=0.7)
button1=tk.Button(frame_1,text='Schlüssel', bg='grey', fg='red', command=lambda:test_function1(entry1.get()))
button1.place(relx=0.4,rely=0.5)
button1.pack()
button2=tk.Button(frame_1,text='Name', bg='grey', fg='red', command=lambda:test_function2(entry2.get()))
button2.place(relx=0.7,rely=0.36)
button2.pack()
button3=tk.Button(frame_1,text='Ort', bg='grey', fg='red', command=lambda:test_function3(entry3.get()))
button3.place(relx=0.1,rely=0.3)
button3.pack()

def saveit(x):
    current_directory = filedialog.askdirectory()
    file_name = x.to_excel("output.xlsx")

    file_path = os.path.join(current_directory,file_name)
button4=tk.Button(frame_1,text='Datei speichern',bg='grey',fg='red', command=lambda:saveit('x'))
button4.pack()
root.mainloop()

Vielen Dank im Vorraus!, Diego
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Als erstes solltest Du an Deinen Variablennamen arbeiten. Die helfen, den Code zu verstehen, also bei Dir, ihn nicht zu verstehen. Was soll x1 bedeuten, und hast Du mal geschaut, was `x` eigentlich enthält?
Dann ist die Leerzeilen-Verteilung ungünstig, für das Verständnis. Keine Leerzeile vor dem def aber zwei danach?
Was glaubst Du denn, was to_execl als Rückgabewert liefert? `current_directory` wird nicht sinnvoll verwendet.
Antworten