Tkinter Radiobutton

di il
5 risposte

Tkinter Radiobutton

Buon giorno a tutti,

Sono nuovo utente del forum, ho sempre avuto la passione di informatica e da poco sto procedendo da autodidatta all'apprendimento del linguaggio Phyton.

Al momento sono bloccato ed ho bisogno di aiuto su argomento radiobutton di Tkinter. Sto impazzendo nel riuscire a capire a come utilizzare il valore dei radiobutton in altre sezioni del programma, ovvero, nell'esempio sottostante al variare dello stato il valore viene correttamente stampato nella consolle, e viene ristampato ogni volta che il valore cambia. Ho necessità di utilizzare questo valore all'esterno della funzione assegnandolo ad una varibile ma il valore ritornato dalla funzione è uguale a zero e non si aggiorna al variare dello stato dei radiobutton, ringrazio anticipatamente.

from tkinter import *
root = Tk()
var = IntVar()
def stampa():
   a=var.get()
   print(a) #stampa correttamente il valore radiobutton nella consolle
   return a
   
b=stampa()
print(b) #stampa valore radiobutton 0 e non stampa valore aggiornato
b=var.get()
print(b) #stampa valore radiobutton 0 e non stampa valore aggiornato

R1 = Radiobutton(root, text="Option 1", variable=var, value=1, command=stampa)
R1.pack()
R2 = Radiobutton(root, text="Option 2", variable=var, value=2,command=stampa)
R2.pack()
R3 = Radiobutton(root, text="Option 3", variable=var, value=3,command=stampa)
R3.pack()
root.mainloop()

5 Risposte

  • Re: Tkinter Radiobutton

    Secondo me fa esattamente quello che gli dici di fare:

    • crei la funzione stampa()
    • chiami stampa 1a volta
    • chiami stampa 2a volta (in sostanza)
    • definisci i radiobutton
    • attivi il mainloop

    Finché non attivi il mainloop le variabili non sono inizializzate. Quindi stamperà sempre 0. Lo stato dei radiobutton lo puoi sempre leggere tramite la variabile var, ma solo dopo il mainloop. Ad esempio:

    from tkinter import *
    from tkinter import ttk
    
    root = Tk()
    root.title("Esempio di radiobutton")
    var = IntVar()
    
    
    def stampa():
        a = var.get()
        return a
    
    
    mainframe = ttk.Frame(root, padding="5 2 12 12")
    mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
    root.columnconfigure(0, weight=1)
    root.rowconfigure(0, weight=1)
    
    Label(mainframe, text='Selezionata opzione ').grid(column=1, row=5, sticky=(W))
    Label(mainframe, textvariable=var).grid(column=2, row=5, sticky=(E))
    
    R1 = Radiobutton(mainframe, text="Option 1", variable=var, value=1, command=stampa)
    R1.grid(column=1, row=1, sticky=(W))
    R2 = Radiobutton(mainframe, text="Option 2", variable=var, value=2, command=stampa)
    R2.grid(column=1, row=2, sticky=(W))
    R3 = Radiobutton(mainframe, text="Option 3", variable=var, value=3, command=stampa)
    R3.grid(column=1, row=3, sticky=(W))
    
    R1.select()
    root.mainloop()

    L'esempio è fatto molto con i piedi, non sono un grande esperto di TkInter…

  • Re: Tkinter Radiobutton

    Grazie per la risposta ma purtroppo non sono ancora riuscito a risolvere. 

    La tua soluzione visualizza il valore dei radiobutton nella finestra e si aggiorna al variare dello stato degli stessi che è esattamente quello che mi occorre, il problema è che poi questo valore lo devo trasferire ad una variabile da utilizzare in un'altra sezione del codice, ho provato in tutti i modi, sia ritornando il valore da una funzione sia con il comando .get(), il valore della nuova varibile non si aggiorna al variare dello stato dei radiobutton.

  • Re: Tkinter Radiobutton

    Il valore del radiobutton lo ottieni leggendo la variabile ‘var’. La variabile ‘var’ sarà valorizzata solo quando i radiobutton saranno visibili e l'istruzione R1.select() sarà stata eseguita.

    Altrimenti posta il codice, così capiamo meglio.

  • Re: Tkinter Radiobutton

    La funzione “stampa” aquisisce il valore della variabile “var” e la stampa nella consolle, quando viene selezionato un'altro radiobutton il valore si aggiorna e viene ristampato.

    Nelle ultime righe prima del “mainloop” provo ad attribuire in due modi differenti il valore di “var” alla nuova variabile “varex” senza successo. 

    from tkinter import *
    root = Tk()
    var = IntVar()
    
    def stampa(): #stampa su consolle e ritorna valore radiobutton
       varget=var.get()
       print(varget) 
       return varget
       
    R1 = Radiobutton(root, text="Option 1", variable=var, value=1, command=stampa)
    R1.pack()
    R2 = Radiobutton(root, text="Option 2", variable=var, value=2,command=stampa)
    R2.pack()
    R3 = Radiobutton(root, text="Option 3", variable=var, value=3,command=stampa)
    R3.pack()
    
    varext=stampa()
    print(varext)
    
    varext=var.get()
    print(varext)
    
    root.mainloop()
  • Re: Tkinter Radiobutton

    Se non metti 

    R1.select() # o altro radiobutton a tuo piacere

    prima di chiamare stampa() var non sarà valorizzata. Ricorda che Tkinter è event-driven, quindi sino a quando non provochi qualcosa (selezioni un radiobutton, premi un button, ecc) il tuo programma sarà sostanzialmente immobile.

Devi accedere o registrarti per scrivere nel forum
5 risposte