Topic: Tkinter Treeview problema caricamento dati con sqlite3  (Letto 107 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline kiasmo70

  • python unicellularis
  • *
  • Post: 19
  • Punti reputazione: 0
    • Mostra profilo
Ciao a tutti,  ho un problema con la visualizzazione dei dati, di un database sqlite3, in Treeview. Il messaggio di errore, rilevato nella funzione add_data, riporta la seguente dicitura:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Program Files\Python39\lib\tkinter\__init__.py", line 1892, in __call__
    return self.func(*args)
  File "C:\Users\Lorenzo\Desktop\progetti PCHARM\OreUniflair\Principale.py", line 87, in addData
    self.listaDati.insert(parent = root, index ="end",values = ([nomid.get(),
  File "C:\Program Files\Python39\lib\tkinter\ttk.py", line 1364, in insert
    res = self.tk.call(self._w, "insert", parent, index, *opts)
_tkinter.TclError: Item . not found


Di seguito vi riporto il codice da me creato.. Qualcuno saprebbe darmi qualche info su cosa potrebbe essere il problema? Ho controllato e ricontrollato ma sinceramente mi sembra tutti in ordine.
Grazie mille a tutti

   

from tkinter import *
import dati_backend
from tkinter import ttk

 class Repackaging:


        def __init__ (self, root):
            self.root = root
            blank_space = " "
            self.root.title(100* blank_space + "Repackaging Database Management System by Lorenzo Tognazzo 2021")
            self.root.geometry("1030x520+0+0")

            nomid = StringVar()
            fornitore = StringVar()
            operatore = StringVar()
            tempo = StringVar()
            ddt = StringVar()
            data = StringVar()

            # ===================FUNZIONI===============================================================================
            def iExit():
                iExit = tkinter.messagebox.askyesno("Database Management System", "Confermi di voler uscire ?")
                if iExit > 0 :
                    root.destroy()
                    return

            def iReset():
                self.txtid.delete(0,tk.END)
                self.txtNomeOperatore.delete(0,tk.END)
                self.txtData.delete(0, tk.END)
                self.txtNumeroDdt.delete(0, tk.END)
                self.txtNomeFornitore.delete(0, tk.END)
                self.txtTempoImpiegato.delete(0, tk.END)

            def addData():
                if operatore == "":
                    tkinter.messagebox.showerror("Attenzione", "Inserire correttamente tutti i dati")
                else:
                    dati_backend.add_dati(nomid.get(),
                                          fornitore.get(),
                                          operatore.get(),
                                          tempo.get(),
                                          ddt.get(),
                                          data.get()
                                          )

                    self.listaDati.insert("end", (nomid.get(),
                                           fornitore.get(),
                                          operatore.get(),
                                          tempo.get(),
                                          ddt.get(),
                                          data.get()))
            #===================FRAMES==================================================================================

            MainFrame = Frame(self.root, bd = 10, width = 1350, height = 700, relief = RIDGE, bg = 'cadet blue')
            MainFrame.grid()

            TopFrame1 = Frame(MainFrame, bd = 5, width = 1340, height = 50, relief = RIDGE)
            TopFrame1.grid(row = 2, column = 0, pady = 8)

            TitleFrame = Frame(MainFrame, bd=7, width=1340, height=100, relief=RIDGE)
            TitleFrame.grid(row=0, column=0)

            TopFrame3 = Frame(MainFrame, bd=5, width=1340, height=500, relief=RIDGE)
            TopFrame3.grid(row=1, column=0)

            LeftFrame = Frame(TopFrame3, bd=5, width=1340, height=400, padx=2 , relief=RIDGE, bg='cadet blue')
            LeftFrame.pack(side =LEFT)
            LeftFrame1 = Frame(LeftFrame, bd=5, width=600, height=180, padx=2,pady=4,  relief=RIDGE)
            LeftFrame1.pack(side=RIGHT)

            RightFrame1 = Frame(TopFrame3, bd=5, width=320, height=400, padx=2, relief=RIDGE, bg='cadet blue')
            RightFrame1.pack(side=RIGHT)
            RightFrame1a = Frame(RightFrame1, bd=5, width=310, height=200, padx=2, pady=2, relief=RIDGE)
            RightFrame1a.pack(side=TOP)

            # ===================TITLE==================================================================================
            self.lblTitle = Label(TitleFrame, font = ('arial', 26 , 'bold'), text = 'Repackaging Database Management System', bd = 7 )
            self.lblTitle.grid(row = 0, column = 0, padx=120)

            # ===================WIDGET==================================================================================

            self.lblNomeOperatore = Label(LeftFrame1, font=('arial', 10, 'bold'), text='Nome Operatore:',bd=7, anchor = 'w', justify = LEFT)
            self.lblNomeOperatore.grid(row=0, column=0, sticky = W, padx = 5)
            self.txtNomeOperatore = Entry(LeftFrame1, font=('arial', 10, 'bold'), width = 30, justify= 'left', textvariable = operatore)
            self.txtNomeOperatore.grid(row=0, column=1)
            self.txtNomeOperatore.insert(0, value_inside.get())

            self.lblData = Label(LeftFrame1, font=('arial', 10, 'bold'), text='Data:', bd=7, anchor='w',justify=LEFT)
            self.lblData.grid(row=1, column=0, sticky=W, padx=5)
            self.txtData = Entry(LeftFrame1, font=('arial', 10, 'bold'), width=30, justify='left',textvariable=data)
            self.txtData.grid(row=1, column=1)
            self.txtData.insert(0,insertDate)

            self.lblNomeFornitore = Label(LeftFrame1, font=('arial', 10, 'bold'), text='Nome Fornitore:',bd=7, anchor = 'w', justify = LEFT)
            self.lblNomeFornitore.grid(row=2, column=0, sticky = W, padx = 5)
            self.txtNomeFornitore = Entry(LeftFrame1, font=('arial', 10, 'bold'), width = 30, justify= 'left', textvariable = fornitore)
            self.txtNomeFornitore.grid(row=2, column=1)

            self.lblTempoImpiegato = Label(LeftFrame1, font=('arial', 10, 'bold'), text='Tempo Impiegato:', bd=7, anchor='w', justify=LEFT)
            self.lblTempoImpiegato.grid(row=3, column=0, sticky=W, padx=5)
            self.txtTempoImpiegato = Entry(LeftFrame1, font=('arial', 10, 'bold'), width=30, justify='left',textvariable=tempo)
            self.txtTempoImpiegato.grid(row=3, column=1)

            self.lblNumeroDdt = Label(LeftFrame1, font=('arial', 10, 'bold'), text='Numero DDT:', bd=7,anchor='w', justify=LEFT)
            self.lblNumeroDdt.grid(row=4, column=0, sticky=W, padx=5)
            self.txtNumeroDdt = Entry(LeftFrame1, font=('arial', 10, 'bold'), width=30, justify='left',textvariable=ddt)
            self.txtNumeroDdt.grid(row=4, column=1)

            self.lblid = Label(LeftFrame1, font=('arial', 10, 'bold'), text='ID:', bd=7, anchor='w',justify=LEFT)
            self.lblid.grid(row=5, column=0, sticky=W, padx=5)
            self.txtid = Entry(LeftFrame1, font=('arial', 10, 'bold'), width=30, justify='left',textvariable=nomid)
            self.txtid.grid(row=5, column=1)

            # ===================TREEVIEW===============================================================================
            scroll_x = Scrollbar(RightFrame1a, orient = HORIZONTAL)
            scroll_y = Scrollbar(RightFrame1a, orient = VERTICAL)

            self.listaDati = ttk.Treeview(RightFrame1a, height = 12, columns = ("nomid","Fornitore", "Operatore", "TempoImpiegato", "NDDT", "Data"),
                                          xscrollcommand = scroll_x.set,yscrollcommand = scroll_y.set)
            scroll_x.pack(side = BOTTOM, fill = X)
            scroll_y.pack(side = RIGHT, fill=Y)

            self.listaDati.heading("nomid", text="ID")
            self.listaDati.heading("Fornitore", text = "Fornitore")
            self.listaDati.heading("Operatore", text="Operatore")
            self.listaDati.heading("TempoImpiegato", text="Tempo Impiegato")
            self.listaDati.heading("NDDT", text="N° DDT")
            self.listaDati.heading("Data", text="Data")

            self.listaDati['show'] = 'headings'

            self.listaDati.column("nomid", width=50)
            self.listaDati.column("Operatore", width=100)
            self.listaDati.column("Data", width = 50)
            self.listaDati.column("Fornitore", width = 100)
            self.listaDati.column("TempoImpiegato", width = 144)
            self.listaDati.column("NDDT", width = 60)
            self.listaDati.pack(fill = BOTH, expand = 1)

            # ===================BUTTONS=================================================================================
            self.btnAddNew = Button(TopFrame1,pady = 1, bd = 4, font = ('arial', 18, 'bold'), text = "Inserisci",
                                    width = 11, height = 2,command= addData).grid(row = 0, column = 0, padx =2)

            self.btnVisualizza = Button(TopFrame1,pady = 1, bd = 4, font = ('arial', 18, 'bold'), text = "Visualizza",
                                    width = 11, height = 2).grid(row = 0, column = 1, padx =2)

            self.btnCancella = Button(TopFrame1,pady = 1, bd = 4, font = ('arial', 18, 'bold'), text = "Elimina",
                                    width = 11, height = 2).grid(row = 0, column = 2, padx =2)

            self.btnReset = Button(TopFrame1,pady = 1, bd = 4, font = ('arial', 18, 'bold'), text = "Reset",
                                    width = 11, height = 2, command = iReset).grid(row = 0, column = 3, padx =2)

            self.btnEsci = Button(TopFrame1,pady = 1, bd = 4, font = ('arial', 18, 'bold'), text = "Esci",
                                    width = 11, height = 2, command = iExit).grid(row = 0, column = 4, padx =2)

    if __name__ == '__main__':
        root = Tk()
        application = Repackaging(root)
        root.mainloop()

Offline kiasmo70

  • python unicellularis
  • *
  • Post: 19
  • Punti reputazione: 0
    • Mostra profilo
Re:Tkinter Treeview problema caricamento dati con sqlite3
« Risposta #1 il: Ottobre 02, 2021, 17:05 »
In realtà ho notato che nelle variabili:

            nomid = StringVar()
            fornitore = StringVar()
            operatore = StringVar()
            tempo = StringVar()
            ddt = StringVar()
            data = StringVar()

non viene inserito nulla, di seguito riporto il codice della funzione "add_dati" all'interno del file "dati_backend"..

def add_dati(nomid,fornitore, operatore, tempo, ddt, data):
    conn = sqlite3.connect("repackaging.db")
    cur = conn.cursor()
    cur.execute("INSERT INTO prova VALUES (?,?,?,?,?,?)", (nomid,fornitore,operatore, tempo, ddt, data))
    conn.commit()
    conn.close()

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 479
  • Punti reputazione: 0
    • Mostra profilo
Re:Tkinter Treeview problema caricamento dati con sqlite3
« Risposta #2 il: Ottobre 02, 2021, 20:09 »
Il traceback del primo post fa supporre manchino consistenti parti del codice.

Controllati molto attentamente come hai definito la Tua classe e la visibilità delle variabili (qualcuna mi sembra manchi proprio), le funzioni interne allo __init__, poi, non sono una idea grandiosa.
Nel complesso direi che hai grosse difficoltà già nel design della interfaccia grafica.