How to get the value of the selected radio button?
Asked Answered
D

1

10

I would like to create 2 different groups of radio buttons. The user would select one option from either group. There would be a function that would get the values(strings) from the selected radio buttons and then print them. Here's my code but it doesn't work (i'm new to python).

from tkinter import *
root = Tk()
btn1 = "lol"
btn2 = "lel"
def funkcija():
    n = entry1.get()
    m = "null"
    X = btn1.get()
    Y = btn2.get()
    print("%s %s je %s %s." % (n, X, m, Y))


theLabel = Label(root, text="Vnesite količino in izberite prvo valuto.")
theLabel.grid(row=0, columnspan=3)

gumb1=Radiobutton(root,text="Euro",value = "euro",variable = "btn1").grid(row=2, column=1, sticky=W)
gumb2=Radiobutton(root,text="Dolar",value = "dolar",variable = "btn1").grid(row=3, column=1, sticky=W)
gumb3=Radiobutton(root,text="Funt",value = "funt",variable = "btn1").grid(row=4, column=1, sticky=W)

label3= Label(root, text="Izberite drugo valuto.")
label3.grid(row=6, columnspan=3)

label35= Label(root)
label35.grid(row=5, columnspan=3)

gumb4=Radiobutton(root,text="Euro",value = "euro",variable = "btn2").grid(row=7, column=1, sticky=W)
gumb5=Radiobutton(root,text="Dolar",value = "dolar",variable = "btn2").grid(row=8, column=1, sticky=W)
gumb6=Radiobutton(root,text="Funt",value = "funt",variable = "btn2").grid(row=9, column=1, sticky=W)

label1 = Label(root, text="Količina:")
label1.grid(row=1, sticky=E)
entry1 = Entry(root)
entry1.grid(row=1, column=1, sticky=W)

go = Button(root, text="Izračun", fg="white", bg="black", command=funkcija)
go.grid(row=10, columnspan=3)

root.mainloop()
Diannediannne answered 19/4, 2015 at 22:18 Comment(2)
Could You write what works? Could You trim the code to something smaller?Perceval
It has already been solved :)Diannediannne
D
11

In your radio button, analyze the parameters that you are passing:

gumb1 = Radiobutton(root,
                    text = "Euro",
                    value = "Euro",
                    variable = "btn2"

The parameters value and variable are what stores the data of the radio button. You've set your value option correctly. The interpreter will automatically set the variable with the value when the radio button is selected.

But here's where your issue is:

variable = "btn2"

"btn2" is a string. Not very useful though, is it? In fact, you're trying to perform methods on it that don't even exist. Such as here:

def funkcija():
    X = btn2.get()

In fact, taking this information, you almost got there!

At the top of your script, you need to set btn2 to Tkinter's StringVar, like so:

from tkinter import *
btn1 = StringVar()
btn2 = StringVar()

Now that's done, let's change our parameters in our radio buttons.

gumb1 = Radiobutton(root,
                text = "Euro",
                value = "Euro",
                variable = btn2

Now, Tkinter will automatically update the variable when it is selected. To get the value, do the same that you had done in your funkcija.

X = btn2.get()

And then the value of btn2 (which was updated by the radio buttons) will not be read, and stored into the variable X.

Dele answered 19/4, 2015 at 22:46 Comment(2)
Thanks so much! There's one more question. Why do I have to set the variables to StringVar below root = Tk() ? If i put them above root = Tk() it doesn't work.Diannediannne
@Diannediannne The StringVar set below root = Tk() is associated with the root window. If it is placed above root = Tk() it is not associated with any window and thus will not work.Quigley

© 2022 - 2024 — McMap. All rights reserved.