我试图制作一个应该激活一个功能的按钮,然后回复"但它不起作用......我做错了什么?
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'
答案 0 :(得分:1)
有三个问题:
root = Tk()
之前创建BooleanVar
。如前所述,您应该使用Checkbutton
小部件而不是Canvas
。 command
然后直接进入构造函数;没有bind
。此外,您的onvalue
和offvalue
与默认值相同,因此也不需要这些。
can = Checkbutton(root, width=20, height=15, bg="light yellow",
variable=okok, onvalue=1, offvalue=0, command=rond)
width
和height
将以字符(即文字的行和列)显示,因此您输入的数字太高。或者,提供图像图标。答案 1 :(得分:0)
看起来你正在使用画布而不是检查按钮。我会尝试这样的事情: cbutton = Checkbutton(root等)
或查看effbot.org以获取更好的资源。