【问题标题】:Clear Text Widget for new text entry on every button press每次按下按钮时都有新的文本输入的清除文本小部件
【发布时间】:2021-04-07 14:12:24
【问题描述】:

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

在我的研究中,弹出了以下线程,他似乎有类似的目标,但我不确定如何将其应用到我的代码中。 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

【问题讨论】:

  • 为什么你认为代码不起作用?我看不出它不起作用的任何明显原因。
  • @BryanOakley - 该按钮只需单击两次即可工作,但我试图清除所有现有文本并单击一次插入。
  • 我不明白这个问题。为什么不直接删除 if 语句然后运行这两个函数?
  • @BryanOakley - 哇,我原以为它可以工作,但是当它没有用时,我开始寻找替代解决方案......我想我一定有别的东西把它扔掉了.谢谢!

标签: python-3.x tkinter tkinter-text


【解决方案1】:

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

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, text="Clear", command=lambda: clear_entry(entry_var))
>>> entry.pack()
>>> button.pack()
>>> root.mainloop()

点击前:

点击后:

【讨论】:

  • Jacob Lee - 我的按钮文本是“生成”,当前设置为 .get 来自文本小部件 1 的多行文本,对其进行处理,然后将其插入回文本小部件 2。我的问题是如何我是否能够在同一个按钮中清除文本框 2 中的文本。即我只希望它先清除文本小部件 2,然后在每次单击按钮时插入新数据。
  • 在这种情况下,您无法使用 StringVar 执行任何您无法直接使用条目小部件执行的操作。 StringVar 的引入增加了复杂性,但实际上并没有解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 1970-01-01
相关资源
最近更新 更多