让 tkinter RadioButtons 使用 function/command 更新变量不起作用

Getting tkinter RadioButtons to update a variable using a function/command is not working

我正在尝试使用函数从单选按钮选择中更新变量:

from tkinter import *

root = Tk()

var1 = StringVar(value = 'rb0')
var2 = StringVar(value = 'rb0')

def fnc1(x):
    var2.set(x)
    return

Radiobutton(root, text = 'rb1', variable = var1, value = 'rb1', command = fnc1('rb1')).pack()
Radiobutton(root, text = 'rb2', variable = var1, value = 'rb2', command = fnc1('rb2')).pack()
Radiobutton(root, text = 'rb3', variable = var1, value = 'rb3', command = fnc1('rb3')).pack()

Label(root, textvariable = var1).pack()
Label(root, textvariable = var2).pack()

root.mainloop()

第一个标签使用正常方法工作正常,但第二个标签 (var2) 始终显示 'rb3' 即使是第一次打开代码(甚至没有选中任何按钮?)。

如何获取代码来更新第二个变量和第一个变量?

Tkinter 东西基本上不喜欢函数的输入,所以你必须使用 lambda。

将您的代码更新为:

from tkinter import *

root = Tk()

var1 = StringVar(value = 'rb0')
var2 = StringVar(value = 'rb0')

def fnc1(x):
    var2.set(x)
    return

Radiobutton(root, text = 'rb1', variable = var1, value = 'rb1', command = lambda: fnc1('rb1')).pack()
Radiobutton(root, text = 'rb2', variable = var1, value = 'rb2', command = lambda: fnc1('rb2')).pack()
Radiobutton(root, text = 'rb3', variable = var1, value = 'rb3', command = lambda: fnc1('rb3')).pack()

Label(root, textvariable = var1).pack()
Label(root, textvariable = var2).pack()

root.mainloop()