【问题标题】:Clearing all Labels from a tkinter window从 tkinter 窗口中清除所有标签
【发布时间】:2016-10-25 12:16:22
【问题描述】:

所以我是 tkinter 的新手,但我已经得到了我想要的工作,直到某个点。 我不确定我的设置是否正确,但我有一张世界地图,右边有按钮,左边有一个事件日志,当事情发生时它会填满标签。 问题是过了一会儿,整个日志填满了。 删除所有标签的最佳方法是什么,或者每次都删除最旧的(顶部)标签? 这就是我的意思:

在这里定义:

root=Tk()
Map=PhotoImage(file="C:/Users/Willam/Desktop/CWProgram/map2.gif")
background=Label(root,image=Map).place(x=100,y=0,relwidth=1,relheight=1)
Title=Label(root,text='                     LOG').pack(anchor=NW)

我这样创建我的标签:

info=Label(root,text='Select a sector to move units from',wraplength=170)
info.pack(anchor=NW)

我尝试了通常的info.destoy() 和info.forget(),但这些仅适用于该函数中使用的最后一个标签。 我应该对所有标签进行分组吗?

【问题讨论】:

  • 非常常见的错误var = Widget().pack() 你将var 赋值给pack(),而不是Widget()。您需要两个步骤var = Widget() 和var.pack()。与place() 相同(如果您将来使用,grid())。
  • 我建议将您的标签附加到列表中。这使得杀死(或回收)最古老的变得容易。

标签: python user-interface tkinter labels


【解决方案1】:

正如 PM 2Ring 所建议的,将标签附加到列表以供将来参考通常很有用:

tmp = Label(...)
labels.append(tmp)

那么就:

foreach label in labels: label.destroy()

如果您不想要列表,并且确定要清除根目录中的所有内容:

foreach label in root.children.values(): label.destroy()

children dict 总是保存其中包含的对象。如果你想保留地图标签,你必须像我展示的那样制作你自己的列表,而不是在其中附加info。

【讨论】:

  • 谢谢,一切正常,实际上删除每个项目,我得到这个错误:
  • AttributeError: 'NoneType' 对象没有属性 'destroy'。这是否意味着我没有正确定义标签?
  • @W.Hunt furas 的评论和 cmets 中的链接问题解释了该错误。
  • 是否:tmp = Label(...) labels.append(tmp) 不完全满足?因为我正在按照@Kabanus 发布的方式进行操作,并且遇到了问题
  • 抱歉,刚刚找到了我错过的 on .pack()
【解决方案2】:

我建议使用:

info.pack_forget()

对于您创建的每个包,您必须按照以下格式进行:

packname.pack_forget()

如果你有很多包是不切实际的,但否则效果很好。

这也使得有选择地移除一些标签并留下其他标签变得非常容易,因为它不会清除您放置的所有包装。

【讨论】:

    【解决方案3】:

    只需使用:

    root.children.clear
    

    清屏后再次输入地图和功能...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-25
      • 2015-03-17
      • 2016-01-04
      • 2014-06-08
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多