我知道这似乎是一个愚蠢的问题,但我已经阅读了我能找到的所有相关/类似的问题,我很确定我遇到了一个不同的问题。请参阅此问题的结尾,以获取我已避免的类似问题列表。
我正在尝试使用Tkinter Checkbutton。我几乎逐字地使用了文档中的示例代码(here)。
from tkinter import Tk, Checkbutton, IntVar
class MyGUI:
def __init__(self, window):
self.var = IntVar()
self.c = Checkbutton(window,
text="Enable Tab",
variable=self.var,
command=self.cb)
self.c.pack()
def cb(self):
print("self.var is", self.var.get())
root = Tk()
gui = MyGUI(root)
root.mainloop()
root.destroy()
我唯一改变的是从event
方法中删除cb
参数,因为据我所知它没有被用于任何东西,并且checkbutton没有通过任何event
到cb
。
我的问题是存储checkbutton值的变量总是读0
,即使检查了checkbutton:
我不知道我做错了什么。我知道我已经避免了以下陷阱:
IntVar
,而不是python int
None
此外,当我从a question with a similar issue运行代码时,我得到相同的行为 - 复选框始终返回False / 0 - 即使该问题被标记为已解决。
我正在使用具有以下版本的Anaconda python:
Python 3.5.4 |Anaconda custom (64-bit)| (default, Nov 8 2017, 14:34:30)
[MSC v.1900 64 bit (AMD64)]
IPython 6.2.1 -- An enhanced Interactive Python.
答案 0 :(得分:0)
您的代码适合我。
也许尝试从Tkinter *导入所有内容并删除最后一行。但我认为你的问题是anaconda bug。
from tkinter import *
class MyGUI:
def __init__(self, window):
self.var = IntVar()
self.c = Checkbutton(window,
text="Enable Tab",
variable=self.var,
command=self.cb)
self.c.pack()
def cb(self):
print("self.var is", self.var.get())
if __name__ == "__main__":
root = Tk()
gui = MyGUI(root)
root.mainloop()
答案 1 :(得分:0)
chkValue = BooleanVar(root)
chkValue.set(True)
chk = Checkbutton(root, text=' Remember Password',var=chkValue)
chk.grid(column=1,row=3,sticky=W)
使用大师
答案 2 :(得分:0)
这是我的解决方案,我必须这样做 您在调用内部并从主文件导入并使用该类时遇到了同样的问题
from tkinter import Tk, Checkbutton, IntVar
class MyGUI:
def __init__(self, window):
self.var = IntVar()
self.c = Checkbutton(window,
text="Enable Tab",
variable=self.var,
command=self.cb)
self.c.pack()
def cb(self):
if self.var.get() == 0:
self.var.set(1)
else:
self.var.set(0)
print("self.var is", self.var.get())
root = Tk()
gui = MyGUI(root)
root.mainloop()