tkinter IntVar 的问题

Posted

技术标签:

【中文标题】tkinter IntVar 的问题【英文标题】:Issues with tkinter IntVar 【发布时间】:2022-01-14 00:22:14 【问题描述】:

我使用的是 python tkinter。代码应该做的是在勾选单选按钮“英里到公里”时打印“插入公里”。这是我的代码:

from tkinter import *

window = Tk()


def radio_button_activate():
    print(radio_state.get())


radio_state = IntVar()
radio_1 = Radiobutton(text="km to miles", value=1,
                      variable=radio_state, command=radio_button_activate)
radio_2 = Radiobutton(text="miles to km", value=2,
                      variable=radio_state, command=radio_button_activate)
radio_1.grid(row=3, column=3)
radio_2.grid(row=3, column=4)


if radio_state.get() == 1:
    print('insert km')

window.mainloop()

由于某种原因,“插入公里”不会打印。

type(radio_state.get())

是整数。

为什么这不起作用?非常感谢您的帮助。

【问题讨论】:

为什么你希望看到来自IntVar 的字符串?顺便说一句,您需要将if 块移动到radio_button_activate() 内。 您在创建单选按钮大约一毫秒后调用radio_state.get() 【参考方案1】:

执行以下代码时,没有选择单选按钮,因此 if 条件将被评估为False 并且不会打印任何内容。

if radio_state.get() == 1:
    print('insert km')

你需要把上面的 if 块移动到radio_button_activate():

def radio_button_activate():
    print(radio_state.get())
    if radio_state.get() == 1:
        print('insert km')
    else:
        print('insert miles')

【讨论】:

非常感谢!但是为什么没有选择单选按钮呢?我是初学者,非常感谢您的解释。 radio_state的初始值如果在创建时没有显式设置则为零,因此不会选择单选按钮。我建议您阅读一些关于 tkinter 应用程序所基于的 event-driven programming 的教程。

以上是关于tkinter IntVar 的问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 StringVar 而不是 IntVar 时 Tkinter 的单选按钮都开始选中?

Tkinter IntVar 返回 PY_VAR0 而不是值

tkinter学习-选择按钮

Tkinter - 只标记一个复选框

Python - 从Tkinter回调返回

Tkinter:有没有办法默认检查复选框?