Forum >> Programmazione Python >> GUI >> Richiamare Label

Pagina: 1

Ciao a tutti, non ricordo se mi fossi già presentato mesi fa all'atto dell'iscrizione, nel caso mi ripresento, mi chiamo David ed ho ripreso lo studio di Python che ho dovuto lasciare per un pò. Premetto che sono un autodidatta e non sono ancora riuscito a capire come funzionano le classi per cui per una maggiore pulizia del codice volevo mettere le funzioni in un modulo esterno, il problema è che in quel modulo non mi riconosce le Label create nel main. Posto qui il codice per come lo sto mettendo giù ora (come esercizio sto tentando di fare una scheda di D&D):




from tkinter import *

root = Tk()
root.geometry("500x200+400+250")
root.title("Prova")

forza = 10
destrezza = 10
costituzione = 10
intelligenza = 10
saggezza = 10
carisma = 10

# Funzioni forza

def aggiungi_forza():
    global forza
    forza += 1
    etichetta_punteggio_forza.config(text=forza,font=12)
    if forza <= 0:
        etichetta_punteggio_forza.config(fg="red")
        etichetta_punteggio_forza.update()
    elif forza >= 11:
        etichetta_punteggio_forza.config(fg="green")
        etichetta_punteggio_forza.update()
    else:
        etichetta_punteggio_forza.config(fg="black")
        etichetta_punteggio_forza.update()


def rimuovi_forza():
    global forza
    forza -= 1
    etichetta_punteggio_forza.config(text=forza,font=12)
    if forza <= 0:
        etichetta_punteggio_forza.config(fg="red")
        etichetta_punteggio_forza.update()
    elif forza >= 11:
        etichetta_punteggio_forza.config(fg="green")
        etichetta_punteggio_forza.update()
    else:
        etichetta_punteggio_forza.config(fg="black")
        etichetta_punteggio_forza.update()

# Funzioni destrezza

def aggiungi_destrezza():
    global destrezza
    destrezza += 1
    etichetta_punteggio_destrezza.config(text=destrezza,font=12)
    if destrezza <= 0:
        etichetta_punteggio_destrezza.config(fg="red")
        etichetta_punteggio_destrezza.update()
    elif destrezza >= 11:
        etichetta_punteggio_destrezza.config(fg="green")
        etichetta_punteggio_destrezza.update()
    else:
        etichetta_punteggio_destrezza.config(fg="black")
        etichetta_punteggio_destrezza.update()


def rimuovi_destrezza():
    global destrezza
    destrezza -= 1
    etichetta_punteggio_destrezza.config(text=destrezza,font=12)
    if destrezza <= 0:
        etichetta_punteggio_destrezza.config(fg="red")
        etichetta_punteggio_destrezza.update()
    elif destrezza >= 11:
        etichetta_punteggio_destrezza.config(fg="green")
        etichetta_punteggio_destrezza.update()
    else:
        etichetta_punteggio_destrezza.config(fg="black")
        etichetta_punteggio_destrezza.update()

etichetta_forza = Label(root, text="Forza").grid(column=0, row=1)
pulsante = Button(root, text="+", command=aggiungi_forza, width=1, height=1)
pulsante.grid(column=1, row=1)
pulsante = Button(root, text="-", command=rimuovi_forza, width=1, height=1)
pulsante.grid(column=2, row=1)
etichetta_punteggio_forza = Label(root, text=forza,font=12)
etichetta_punteggio_forza.grid(column=3, row=1)

etichetta_destrezza = Label(root, text="Destrezza").grid(column=0, row=2)
destrezza_piu = Button(root, text="+", command=aggiungi_destrezza, width=1, height=1)
destrezza_piu.grid(column=1, row=2)
destrezza_meno = Button(root, text="-", command=rimuovi_destrezza, width=1, height=1)
destrezza_meno.grid(column=2, row=2)
etichetta_punteggio_destrezza = Label(root, text=destrezza,font=12)
etichetta_punteggio_destrezza.grid(column=3, row=2)

root.mainloop()
In pratica le funzioni qui presenti vorrei poterle mettere in un modulo esterno importandolo nel main, anche perchè una volta terminato diverranno tantissime, il problema è che se creo questo modulo, mentre il main mi vede le funzioni nel modulo, il modulo non vede riconosce le Label che ho creato nel Main, mi dice che non hanno una referenza... Sicuramente sarà una sciocchezza ma ci sto picchiando da ore e alla fine ho deciso di fare tutto nel main... Ma in ogni caso voglio capire come si possa fare una cosa del genere.

Grazie in anticipo.

Beh sì per forza... queste sono proprio le basi dei namespace e del meccanismo degli import in Python. Il tuo modulo "side" utilizza delle variabili che hai definito in "main"... e che ovviamente non trova. E' come se tu facessi

# modulo "side.py"
def foo():
    return magic + 42 # che cosa e' "magic"? niente!...

val = foo()

# ===============================
# modulo "main.py"
import side

magic = 100  # QUI "magic" e' qualcosa... ma solo qui
print(side.val) # ovviamente questo non emette "142", ma da errore
Qui non c'entra niente Tk, le label, le gui... è proprio una questione di imparare a organizzare i moduli, e come funzionano i namespace.


> ci sto picchiando da ore

guarda, non c'è proprio bisogno di "picchiare" niente... la cosa da fare sarebbe prendere un buon libro (il Lutz è sempre il consiglio che mi sento di dare) e seguirlo passo-passo prendendosi del tempo a ogni pagina.

Ciao, intanto grazie per la risposta, quel libro che mi hai suggerito lo avevo visto ed in effetti mi pareva molto interessante, solo che l'ultima edizione è del 2011, per questo non l'ho mai preso. Ora sto seguendo dei corsi gratuiti in giro per la rete aiutandomi con un libricino che acquistai un paio di anni fa.
Ho chiesto quella cosa perchè a sto punto sto imparando le cose man mano che mi si presentano i problemi e volevo capire.

Non sono ancora arrivato ad argomenti avanzati ed infatti la mia idea era solo quella di provare un semplice programma per testare quanto appreso ma, purtroppo, sono fatto male e mentre faccio le cose cerco sempre di migliorarle, anche cercando di fare cose che non ho ancora studiato.
Eh sì, purtroppo in italiano sono arrivati solo alla 4 edizione. In inglese è disponibile la 5...


Detto questo, non è che poi cambi molto. Le basi sono le stesse, e il metodo con cui sono spiegate le cose è quello che conta, e il Lutz spiega abbastanza bene.


I "corsi gratuiti in giro per la rete" sono il peggio del peggio del peggio del peggio... c'è talmente tanta di quella spazzatura in giro...


Comunque, le gui sono difficili, lascia perdere le gui almeno per 6 mesi / 1 anno... so che non lo farai comunque, ma per ragioni etiche su un forum bisogna comunque almeno enunciare il consiglio giusto... poi ognuno si regola...



Pagina: 1



Esegui il login per scrivere una risposta.