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…