清除文本小部件,用于每次按下按钮时输入新文本

问题描述

我正在尝试清除或重置文本框并存储新结果。基本上,每次按下按钮时,我都希望在存储新文本之前清空文本框。

在我的研究中,出现了以下线程,他似乎也有类似的目标,但我不确定如何将其应用到我的代码中。 TKinter - Clear text widget

我已经尝试了以下方法,但由于明显的原因它不起作用。不知道还有什么方法可以解决这个问题。

button = tk.Button(root,command=lambda: button_cmmd())

def button_cmmd():
    if len(text_widget_1.get("1.0","end-1c")) <= 5:
        #I get descriptions - this portion works.
    else:
        text_widget_2.delete("1.0",END)

编辑 我工作的一半解决方案是:

def button_cmmd():
    if len(text_widget_2.get("1.0","end-1c")) <= 2:
        text_widget_1.get("1.0","end-1c"))
    else:
        text_widget_2.delete("1.0","end-1c")

现在的一个小问题是,单击按钮一次将填充 text_Box_2,第二次单击将删除该文本,因此您必须第三次单击它才能再次运行 .get

解决方法

您可以使用 tkinter.StringVar 对象并将其传递给 textvariable 调用的 tkinter.Entry() 参数。

entry_var = tkinter.StringVar(root,value="default value")
entry = tkinter.Entry(root,textvariable=entry_var)
button = tkinter.Button(root,text="Clear",command=lambda: clear_entry(entry_var))

entry.pack()
button.pack()

def clear_entry(var):
    var.set("")

为了测试它,我只是在 IDLE 中运行它:

>>> import tkinter
>>> root = tkinter.Tk()
>>> entry_var = tkinter.StringVar(root,value="default value")
>>> def clear_entry(var):
    var.set("")

    
>>> entry = tkinter.Entry(root,textvariable=entry_var)
>>> button = tkinter.Button(root,command=lambda: clear_entry(entry_var))
>>> entry.pack()
>>> button.pack()
>>> root.mainloop()

点击前:

Before

点击后:

After