如何获取所选单选按钮的值?

10

我想创建两组单选按钮。用户将从任一组中选择一个选项。有一个函数会获取所选单选按钮的值(字符串),然后打印出来。这是我的代码,但它不起作用(我是 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()

你能写出可行的代码吗?你能把代码缩小到更小的规模吗? - Michas
已经解决了 :) - Zoxx
1个回答

11

请分析您在单选按钮中传递的参数:

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

参数valuevariable是存储单选按钮数据的内容。您已正确设置value选项。当选择单选按钮时,解释器将自动使用value来设置variable

但这里是你遇到问题的地方:

variable = "btn2"

"btn2" 是一个字符串。不过它并没有什么用,因为你试图对其执行一些根本不存在的方法。例如这里:

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

实际上,有了这些信息,你差不多就到达了目的地!

在你的脚本顶部,你需要将 btn2 设置为 Tkinter 的 StringVar,像这样:

from tkinter import *
btn1 = StringVar()
btn2 = StringVar()
现在完成了,让我们更改单选按钮中的参数。
gumb1 = Radiobutton(root,
                text = "Euro",
                value = "Euro",
                variable = btn2

现在,当变量被选择时,Tkinter会自动更新它。要获取该值,请执行与您在funkcija中所做的相同操作。

X = btn2.get()

然后,由单选按钮更新的 btn2 的值将不会被读取并存储到变量 X 中。


非常感谢!还有一个问题。为什么我必须在 root = Tk() 下面设置变量为 StringVar?如果我把它们放在 root = Tk() 上面,它就不起作用。 - Zoxx
1
在root = Tk()下面设置的StringVar与根窗口相关联。如果它放在root = Tk()上面,它就不会与任何窗口相关联,因此无法工作。 - Anshu Kumar Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接