我是一个初学者,试图编写一个程序,根据条目的值添加或删除小部件(checkbutton)。例如,如果条目大于1,则会添加复选框,否则程序将删除该复选框。
我的代码会创建小部件,但在更改条目后不会删除它,我无法弄明白。你能帮帮我吗?
提前感谢您的帮助!
这是我的代码的简短示例:
from Tkinter import *
root = Tk()
def update(*args):
print EntryVar.get()
if EntryVar.get()>'1':
cb = Checkbutton(root,text="Show check box")
cb.grid(row = 1)
elif EntryVar.get()<='1' or EntryVar.get() == '':
try:
cb.grid_remove()
except:
pass
EntryVar = StringVar()
EntryVar.trace('w',update)
Entry = Entry(root,textvariable = EntryVar)
Entry.grid(row = 0)
root.mainloop()
如果您需要更多详细信息,请与我们联系:)
答案 0 :(得分:0)
一个问题是cb在try:下是“未解决的”,一旦你声明它是全局的,它就会像你想要的那样“表现”:
from Tkinter import *
root = Tk()
def update(*args):
print EntryVar.get()
global cb
if EntryVar.get()>'1':
cb = Checkbutton(root,text="Show check box")
cb.grid(row = 1)
elif EntryVar.get()<='1' or EntryVar.get() == '':
try:
cb.grid_remove()
except:
pass
EntryVar = StringVar()
EntryVar.trace('w',update)
Entry = Entry(root,textvariable = EntryVar)
Entry.grid(row = 0)
root.mainloop()
但即便如此,在获取Entry值时您将面临另一个挫折,因为字符串按字典顺序进行比较,并且不同类型通过其类型名称进行比较,此问题已被提出here
另一点,如果您撤消异常处理,您将看到如果用户键入0或1,您的程序将与"NameError: name 'cb' is not defined"
崩溃,因为您的检查按钮不存在(未定义)且没有任何要删除的内容,如果在函数的初始化时定义了检查按钮,则在尝试grid_remove()或delete()时不会删除它。此外,当您输入非数字字符串时,您的程序将没有所需的行为。考虑更改您正在使用的逻辑和var类型。
还要注意,当if EntryVar.get() > '2':
(你可以玩这个)时,行为会发生变化,所以肯定会有一些与逻辑有关的东西。