GUI e Dizionari

di il
3 risposte

GUI e Dizionari

Sera Ragazzi, mentre mi esercitavo sulle GUI in Python 3, mi è venuto in mente di provare a farne una (ancora grezzissima) dove tramite un Button e una Entry() immettevo il titolo del film che volevo aggiungere al mio Dizionario, se esso non fosse presente nel Dizionario, lo inseriva e gli dava come value :1 , altrimenti se il libro fosse già presente ne aumentava la quantità ---> value, ecc ecc
Provando a farlo tramite bottone non riesco a fargli salvare dentro al dizionario ciò che è scritto nella mia Entry()... vi lascio il codice, se potete dateci un'occhiata
from tkinter import *



libreria ={"Harry Potter e la pietra filosofale": 1,
            "Harry Potter e la camera dei segreti": 1,
            "Harry Potter e il prigioniero di Hazkaban": 1,
            "Harry Potter e il calice di fuoco": 2,
            "Harry Potter e l'ordine della fenice": 3,
            "Harry Potter e il principe mezzosangue": 5,
            "Harry Potter e i doni della morte pt.1": 7,
            "Harry Potter e i doni della morte pt.2": 7
            }
#Funzione che aggiunge un libro alla libreria, se già presente ne aumenta il valore di 1,
#altrimenti lo aggiunge e setta il suo valore iniziale a 1

def insertBook(a,b):
    collezione = a
    titolo = b

    try:
        if titolo not in collezione.keys():
            collezione[titolo] = 1
        else:
            print("Il libro è già presente in libreria, aumento la sua quantità di 1.")
            collezione[titolo] += 1
    except:
        print("C'è qualche errore!")


#insertBook(libreria,"Harry Potter e la maledizione dell'erede")

def sellBook(a):
    titolo = a
    esitoLibro = titolo in libreria # mi restituisce True se il libro è già presente in libreria, False altrimenti
    esito_Vendita = False

    if esitoLibro == True :
        print("Titolo disponibile, quantità: ", libreria[titolo])
        esito_Vendita = True
        libreria[titolo] -= 1
        if libreria[titolo] == 0:
            del libreria[titolo]
    else:
        print("Mi spiace, il seguente titolo non è presente in libreria.")
    print(esito_Vendita)


def showLibrary():
    print(libreria)

finestra = Tk()
#v = StringVar(value='')


nomeProgramma = finestra.title("Libreria")
finestra.geometry("450x450+450+155")
coloreSfondo = finestra.configure(bg="grey")
casella_Testo = Entry(finestra)
v = str(casella_Testo.get())
bottoneInserimento = Button(finestra, text= "Aggiungi film alla collezione", command=insertBook(libreria, v))
bottoneInserimento.configure(cursor ="hand2")
bottoneInserimento.grid(row=0, column=1, padx=35, pady=35)

showButton= Button(finestra, text="Mostra collezione", command=showLibrary)
showButton.configure(cursor="hand2")
showButton.grid(row=1, column=1, padx=35)

casella_Testo.grid(row=0, column=0, pady=35)

#insertBook(libreria, "AAAAAAAAAAAAAAAAAAA")






finestra.mainloop()

3 Risposte

  • Re: GUI e Dizionari

    Ci sono alcune cose che non vanno nel tuo codice.
    In Python le variabili delle funzioni sono locali, quindi se passi una variabile che deve essere modificata, la devi ritornare, altrimenti le modifiche andranno perdute. Quindi
    def insertBook(a,b):
        collezione = a
        titolo = b
    non produrrà alcun risultato, perché collezione non viene ritornata. Questo passaggio di valori è inoltre superfluo, potevi scrivere direttamente
    def insertBook(collezione, titolo):
    Inoltre all'avvio del programma la funzione insertBook viene chiamata senza che venga premuto niente, generando quindi un inserimento a vuoto. Questo comportamento non so se dipende da Tk o da come hai fatto il programma: non conosco molto Tk.
    In conclusione, ho modificato insertBook:
    def insertBook():
        
        titolo = str(casella_Testo.get())
    
        if titolo != "":
            try:
                if titolo not in libreria:
                    libreria[titolo] = 1
                else:
                    print("Il libro è già presente in libreria, aumento la sua quantità di 1.")
                    libreria[titolo] += 1
            except:
                print("C'è qualche errore!")
  • Re: GUI e Dizionari

    Grazie mille Andrea per avermi risposto...
    in effetti le prime righe di insertBook() non avevano alcuna utilità... appena torno a casa provo a vedere se funge
  • Re: GUI e Dizionari

    Perfetto, funziona
Devi accedere o registrarti per scrivere nel forum
3 risposte