Tkinter Checkbutton无法正常工作

时间:2018-05-10 15:14:43

标签: python user-interface button tkinter

我知道这似乎是一个愚蠢的问题,但我已经阅读了我能找到的所有相关/类似的问题,我很确定我遇到了一个不同的问题。请参阅此问题的结尾,以获取我已避免的类似问题列表。

我正在尝试使用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没有通过任何eventcb

我的问题是存储checkbutton值的变量总是读0,即使检查了checkbutton:See behaviour here

我不知道我做错了什么。我知道我已经避免了以下陷阱:

此外,当我从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.

3 个答案:

答案 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)

使用大师

  • BooleanVar(master)
  • IntVar(master)
  • StringVar(master)

答案 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()