tkinter:checkbutton无效

时间:2017-03-08 13:44:53

标签: python-3.x tkinter

我试图制作一个应该激活一个功能的按钮,然后回复"但它不起作用......我做错了什么?

from tkinter import*

def rond():
if okok.get()==1:
    print("ok")


okok = BooleanVar()
okok.set(0)
root = Tk()
can = Canvas(root, width=200, height=150, bg="light yellow")
can.bind("<ButtonPress-1>", variable=okok, onvalue=1, offvalue=0, command=rond)
can.pack(side="top")


root.mainloop()

运行后会出现:

Traceback (most recent call last): File "/PycharmProjects/untitled/testtest.py", line 7, in <module> okok = BooleanVar() File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__. py", line 389, in __init__ Variable.__init__(self, master, value, name) File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__.py", line 233, in __init__ self._root = master._root() AttributeError: 'NoneType' object has no attribute '_root'

2 个答案:

答案 0 :(得分:1)

有三个问题:

  1. 您获得的例外是因为您必须在root = Tk()之前创建BooleanVar
  2. 如前所述,您应该使用Checkbutton小部件而不是Canvascommand然后直接进入构造函数;没有bind。此外,您的onvalueoffvalue与默认值相同,因此也不需要这些。

    can = Checkbutton(root, width=20, height=15, bg="light yellow",
                      variable=okok, onvalue=1, offvalue=0, command=rond)
    
  3. 如果没有图片图标,widthheight将以字符(即文字的行和列)显示,因此您输入的数字太高。或者,提供图像图标。

答案 1 :(得分:0)

看起来你正在使用画布而不是检查按钮。我会尝试这样的事情: cbutton = Checkbutton(root等)

或查看effbot.org以获取更好的资源。