Python 根据跟踪变量使用tkinter创建/销毁小部件
我想根据条目小部件的当前状态创建一个按钮:如果其中写入了内容,则应创建该按钮,但如果再次清除,则应再次销毁该按钮 在下面的代码中,我实现了一些“类似”的功能:Python 根据跟踪变量使用tkinter创建/销毁小部件,python,tkinter,trace,Python,Tkinter,Trace,我想根据条目小部件的当前状态创建一个按钮:如果其中写入了内容,则应创建该按钮,但如果再次清除,则应再次销毁该按钮 在下面的代码中,我实现了一些“类似”的功能: from tkinter import * from tkinter import Tk root = Tk() check = StringVar() def create(*args): if check.get() != '': grid_014 = Button(root, width=40, tex
from tkinter import *
from tkinter import Tk
root = Tk()
check = StringVar()
def create(*args):
if check.get() != '':
grid_014 = Button(root, width=40, text='something changed', bd=5)
else:
grid_014 = Label(root, width=40, text='', bd=5)
grid_014.grid(column=1, row=2)
grid_entry = Entry(root, width=40, textvariable=check)
grid_entry.grid(column=1, row=1)
check.trace('w', create)
root.mainloop()
但后来我意识到,不完全是这样。因为,据我所知,我正在做的是用标签小部件替换按钮小部件,反之亦然,总是在彼此之上。这是可见的,因为按钮小部件的边界不会消失。据我所知,这也造成了内存泄漏
我现在的问题是,如果条目小部件的更改导致if条件的更改,那么“清除”前一个小部件的最佳方式是什么
这背后的原因是,我想让程序的用户有可能与程序的某些部分进行交互,前提是之前满足了某些条件,比如说“保存”按钮只会在写入文件名后出现,诸如此类的事情
例如,与其销毁小部件,不如使用跟踪
变量,可能是另一种选择。(Nae的链接给出了解决方案,谢谢(!),使用按钮的“正常”和“禁用”状态;但是,我也希望看到其他建议,这些建议也会对清除小部件的可能性进行评论,因为在一般情况下,如上述代码所示,在if条件下,它将不是同一个小部件,因此不能使用按钮的“正常”/“禁用”状态相同的小部件)。您的实现是正确的。我能想到的最好的方法是,在创建一个新的小部件之前,简单地销毁这个小部件(如果它存在的话) 添加另一个
如果销毁网格的如果存在,例如:
if grid_014:
grid_014.destroy()
if check.get() != '':
grid_014 = Button(root, width=40, text='something changed', bd=5)
else:
grid_014 = Label(root, width=40, text='', bd=5)
你的认识完全正确。我能想到的最好的方法是,在创建一个新的小部件之前,简单地销毁这个小部件(如果它存在的话)
添加另一个如果销毁网格的如果存在,例如:
if grid_014:
grid_014.destroy()
if check.get() != '':
grid_014 = Button(root, width=40, text='something changed', bd=5)
else:
grid_014 = Label(root, width=40, text='', bd=5)
您可以检查条目
小部件是否为空,然后禁用条目
如果条目
不为空,则应激活
from tkinter import *
from tkinter import Tk
root = Tk()
check = StringVar()
def create(*args):
if check.get() != '':
grid_014 = Button(root, width=40, text='something changed', bd=5)
elif len(check.get())==0:
grid_014 = Button(root, width=40, state="disabled")
else:
grid_014 = Label(root, width=40, text='', bd=5)
grid_014.grid(column=1, row=2)
grid_entry = Entry(root, width=40, textvariable=check)
grid_entry.grid(column=1, row=1)
check.trace('w', create)
root.mainloop()
您可以检查条目
小部件是否为空,然后禁用条目
如果条目
不为空,则应激活
from tkinter import *
from tkinter import Tk
root = Tk()
check = StringVar()
def create(*args):
if check.get() != '':
grid_014 = Button(root, width=40, text='something changed', bd=5)
elif len(check.get())==0:
grid_014 = Button(root, width=40, state="disabled")
else:
grid_014 = Label(root, width=40, text='', bd=5)
grid_014.grid(column=1, row=2)
grid_entry = Entry(root, width=40, textvariable=check)
grid_entry.grid(column=1, row=1)
check.trace('w', create)
root.mainloop()
可能的重复可能的重复