关于Tkinter 中 checkbutton控件variable的疑问

近几天,在编代码的时候,遇到了一个问题,就是如果我创建一个booleanvar,并且绑在一个check button控件上,正常情况下,应该是当check button被选中的时候booleanvar的值是True,反之则是False

img

img


但是如果说我是在一个自定义函数中声明的Check button,那么无论如何都是False

img

img

这里试过把之前定义的布尔型变量变成全局变量,但是并不奏效
是什么原因导致了无法改变布尔型变量的值
以及如何解决这个问题

二编:对不起,因为截图问题导致的模糊,敬请谅解

问题出在你同时创建了两个Tk实例,导致checkBtnVar的状态无法响应。应该只创建一个Tk实例,然后在其内部创建其他组件。

以下是修改后的代码:

from tkinter import *

root = Tk()
checkBtnVar = BooleanVar()

def printout():
    print(checkBtnVar.get())

def createWindow():
    root2 = Toplevel(root)
    checkbutton = Checkbutton(
        root2,
        variable=checkBtnVar,
        text='hit me',
        command=printout
    )

    checkbutton.pack()

button = Button(
    root,
    text='create a window',
    command=createWindow
)

button.pack()
root.mainloop()

我们只创建了一个Tk实例,然后在createWindow函数内部使用Toplevel创建了一个新的窗口。checkBtnVar变量的状态在不同窗口之间共享,我们只需要创建一个实例即可实现功能。