2017-09-13 46 views
-1

所以,基本上发生了什么是我做了一个密码管理器,它有一个密码生成部分,我将它移动到一个窗口化的Tkinter程序,以方便使用。除了复选框外,我得到了一切,所以起初当函数被调用时,它会给我错误的是字母表有空的长度,所以我设置字母表与特殊字符列表相等。之后,我用while循环尝试了它们,结果相同。 (这整个代码是程序中的一个函数,只有在按下按钮时才会运行)我知道我可以用init修复这个问题,但我希望如果有人知道一个更简单的方法,而不会重写太多。这里是编辑简化代码。我用了while循环,并得到了与if语句相同的结果。我得到了这种情况下未定义a的错误。Tkinter cbox不更改var值

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() 
+1

我知道我使用的变量是很糟糕,但我试图让一切为了我的第一个程序向右走。 –

+0

请创建一个[mcve]。在你的问题中没有足够的代码来知道问题是什么,并且你没有留下关键的细节,比如什么类型的对象是'special_characters_cbox'。 –

+0

我创建了一个最小,完整和可验证的代码示例。它显示复选框在单击时不分配变量。 –

回答

0

要获得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() 
+0

谢谢,它工作完美,解决了我所有的变量问题。 –