How can I store the data of my Tkinter entries into a DataFrame to later export it to Excel? How can I store the data of my Tkinter entries into a DataFrame to later export it to Excel? tkinter tkinter

How can I store the data of my Tkinter entries into a DataFrame to later export it to Excel?


First: entry1 is local variable which exists only in opennewwindow. You should use global entry1 in opennewwindow to inform this function that it has to use external/global variable when you do entry1 = ...

Second: using entry1 = tk.Entry(...).grid(...) you assign None to entry1 because grid()/pack()/place() always return None. You have to do it in two steps:

entry1 = tk.Entry(...)entry1.grid(...)

Code:

import tkinter as tkimport pandas as pddef saveinfo():    valor1 = entry1.get()    valor2 = entry2.get()    valor3 = entry3.get()    data.append([valor1, valor2, valor3])    print(data)def export():    df = pd.DataFrame(data)    df.to_excel("DataBase.xlsx")def opennewwindow():    global entry1    global entry2    global entry3    window.destroy()    newwindow = tk.Tk()    tk.Label(newwindow, text="Please, enter data: ").grid(column=0, row=0, columnspan=3)    tk.Label(newwindow, text="Number").grid(column=0, row=1)    entry1 = tk.Entry(newwindow)    entry1.grid(column=1, row=1)    tk.Label(newwindow, text="Description", ).grid(column=0, row=2)    entry2 = tk.Entry(newwindow)    entry2.grid(column=1, row=2)    tk.Label(newwindow, text="Brand").grid(column=0, row=3)    entry3 = tk.Entry(newwindow)    entry3.grid(column=1, row=3)    tk.Button(newwindow, text="Save", command=saveinfo).grid(column=2, row=2, sticky='we')    tk.Button(newwindow, text="Export", command=export).grid(column=2, row=3, sticky='we')    newwindow.mainloop()# --- main ---df = pd.DataFramedata = []window = tk.Tk()tk.Label(window, text="Platform").grid(column=0, row=0)tk.Button(window, text="Choose an element: ", command=opennewwindow).grid(column=0, row=1)window.mainloop()


Just to show you how to do it with OOP and classes.

import tkinter as tkimport pandas as pdclass App(tk.Tk):    def __init__(self):        super(App, self).__init__()        self.geometry("320x156")        self.title("Master")        self.label = tk.Label(self, text = "Platform", font = ("Arial", 25))        self.label.grid(column = 0, row = 0)        self.boton = tk.Button(self, text = "Choose an element: ", command = self.opendialog)        self.boton.grid(column = 0, row = 1)    def opendialog(self):        dial = Dialog()class Dialog(tk.Toplevel):    def __init__(self):        super(Dialog, self).__init__()        self.titulo = tk.Label(self, text = "Please, enter data: ", font=("Calibri", 10))        self.titulo.grid(column = 0, row = 0)        self.textoentry1 = tk.Label(self, text = "Number", font = ("Arial", 8))        self.textoentry1.grid(column = 0, row = 1)        self.entry1 = tk.Entry(self, width=10)        self.entry1.grid(column = 1, row = 1)        self.textoentry2 = tk.Label(self, text = "Description", font = ("Arial", 8))        self.textoentry2.grid(column = 0, row = 2)        self.entry2 = tk.Entry(self, width=10)        self.entry2.grid(column = 1, row = 2)        self.textoentry3 = tk.Label(self, text = "Brand", font = ("Arial", 8))        self.textoentry3.grid(column = 0, row = 3)        self.entry3 = tk.Entry(self, width=10)        self.entry3.grid(column = 1, row = 3)        self.botonguardar = tk.Button(self, text = "Save", command = self.saveinfo)        self.botonguardar.grid(column = 3, row = 2)        self.botonexportar = tk.Button(self, text = "Export", command = self.export)        self.botonexportar.grid(column = 3, row = 3)        self.data = []    def saveinfo(self):        valor = self.entry1.get()        self.data.append(valor)    def export(self):        df = pd.DataFrame(self.data)        df.to_excel("DataBase.xlsx")window = App()window.mainloop()

As you see, each window is a class. The elements (widgets) of the window are attributes of the class, defined in the __init__ method. Also the data list where you want to store the values is an attribute of the class.
Other methods of the class are used as callbacks, and have naturally access to the attributes.

The only difference with your code, is that here I do not destroy the main window when the dialog is shown.