Python Tkinter cbox没有';不改变var值

Python Tkinter cbox没有';不改变var值,python,checkbox,tkinter,Python,Checkbox,Tkinter,所以,本质上,我做了一个密码管理器,其中有一个密码生成部分,为了便于使用,我把它移到了一个窗口Tkinter程序中。我记下了除复选框之外的所有内容,因此在最初调用函数时,它会给我一个错误,即字母表的长度为空,因此我将字母表设置为与具有特殊字符的列表相等。之后,我用while循环进行了尝试,得到了相同的结果。(整个代码是程序中的一个函数,只有按下按钮时才会运行)我知道我可能可以用init解决这个问题,但我希望如果有人知道一种更简单的方法,而不需要重写太多。下面是使代码简化的编辑。我将它与while

所以,本质上,我做了一个密码管理器,其中有一个密码生成部分,为了便于使用,我把它移到了一个窗口Tkinter程序中。我记下了除复选框之外的所有内容,因此在最初调用函数时,它会给我一个错误,即字母表的长度为空,因此我将字母表设置为与具有特殊字符的列表相等。之后,我用while循环进行了尝试,得到了相同的结果。(整个代码是程序中的一个函数,只有按下按钮时才会运行)我知道我可能可以用init解决这个问题,但我希望如果有人知道一种更简单的方法,而不需要重写太多。下面是使代码简化的编辑。我将它与while循环一起使用,得到了与if语句相同的结果。我得到一个错误,在这种情况下没有定义a

from tkinter import *
import random

def cbox_var():
    while cbox_1 == True:
        a = 10
    while cbox_1 == False:
        a = 20
    print(a)

main = Tk()
cbox_1 = Checkbutton(main, text="yes or no")
cbox_1.pack()
testbutton = Button(main,text="Test", command=cbox_var)
testbutton.pack()

main.mainloop()

要获取checkbutton的值,必须为其指定一个特殊的tkinter变量。然后可以通过调用变量上的
get
方法来获取值

例如:

import tkinter as tk

def cbox_var():
    checked = cbox_variable.get()
    print("Checked?", checked)

main = tk.Tk()
cbox_variable = tk.BooleanVar()
cbox_1 = tk.Checkbutton(main, variable=cbox_variable, text="yes or no")
cbox_1.pack()
testbutton = tk.Button(main,text="Test", command=cbox_var)
testbutton.pack()

main.mainloop()

我知道我对变量的使用非常糟糕,但我正试图让我的第一个程序一切正常运行。请创建一个。您的问题中没有足够的代码来了解问题所在,并且您遗漏了一些关键的细节,例如对象的类型
特殊字符\u cbox
。我创建了一个最小、完整且可验证的代码示例。这表明在单击时复选框没有分配变量。谢谢,它工作得很好,修复了我所有的变量问题。