【问题标题】:How do I remove the glitched text after updating a Tkinter label?更新 Tkinter 标签后如何删除故障文本?
【发布时间】:2021-03-20 12:35:56
【问题描述】:

我正在制作一个 Tkinter 应用程序,该应用程序在执行某些操作后会更改标签的文本,并且每当我更改标签的文本值然后重新对其进行网格化时,旧文本仍然存在于它后面。我试过label.grid_forget() 但这并没有解决它。这是我目前所拥有的东西:

from tkinter import *
root = Tk()
# Update text function
def update(txt):
  global label
  label = Label(root, text=txt)
  label.grid(row = 1, columnspan = 2, padx=5, pady=5)
# Button 1
btn1 = Button(root, text="Button #1", command=lambda:update("You clicked button #1! My favorite."))
btn1.grid(row = 0, column = 0, padx=5, pady=5)
# Button 2
btn2 = Button(root, text="Button #2", command=lambda:update("You clicked button #2."))
btn2.grid(row = 0, column = 0, padx=5, pady=5)
# Label
label = Label(root, text="Click the buttons to change me.")
label.grid(row = 1, columnspan = 2, padx=5, pady=5)

代码显示了两个按钮和一个文本标签,试图按照我描述的方式进行操作。单击两个按钮后,其中一个仍然从后面可见,我不知道如何解决这个问题。任何帮助将不胜感激。

【问题讨论】:

  • 你的def update(txt): 应该只包含label.config(text=txt)
  • 哦,谢谢!我不知道我能做到。下次我会一直阅读文档。我刚刚试了一下,效果很好。

标签: python tkinter


【解决方案1】:

这不是错误的文本,也许是文本覆盖,因为您在函数内部创建了一个在另一个之上的文本(正如 JacksonPro 所说)。因此,在函数外部创建标签并在内部使用config 对其进行更新,例如:

label = Label(root)
def update(txt):
    label.config(text=txt)
    label.grid(row=1,columnspan=2,padx=5,pady=5)

现在您还可以删除 global,因为在函数外部定义的变量可用于全局范围。还要注意将缩进增加到习惯的 4 个空格,即使是 2 或 1 甚至 10 也可以,但最好遵守约定。

【讨论】:

  • 这行得通,谢谢。我会记住这一点的。
猜你喜欢
  • 2021-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 2021-07-26
相关资源
最近更新 更多