【问题标题】:How to remove widgets from grid in tkinter?如何从 tkinter 的网格中删除小部件?
【发布时间】:2014-06-05 01:23:39
【问题描述】:

我在显示查询结果的 tkinter 框架中有一个网格。它有一个手动更改的日期字段,然后日期用作查询这些结果的参数。每次更改日期时,显然结果都会更改,从而给出不同数量的行。问题是,如果您第二次获得的行数较少,那么您仍然会在这些行下获得第一个查询的结果,并且会非常混乱。

我的问题是,如何从框架中删除行号大于 6 的所有行(无论其中有什么)?

顺便说一句,我正在运行 Python 3.3.3。提前致谢!

【问题讨论】:

  • 请发布一些代码,让我了解您如何设置代码,以便响应有意义。
  • 另请参阅 Brian Oakley 的回答 here 几乎可以满足您的要求,不是吗?

标签: python python-3.x tkinter


【解决方案1】:

在小部件上调用 grid_forget 方法会将其从窗口中移除 - 此示例使用父级上的调用grid_slaves 找出所有 小部件映射到网格,然后调用grid_info 了解 每个小部件的位置:

>>> import tkinter
# create: 
>>> a = tkinter.Tk()
>>> for i in range(10):
...    label = tkinter.Label(a, text=str(i))
...    label.grid(column=0, row=i)
# remove from screen:
>>> for label in a.grid_slaves():
...    if int(label.grid_info()["row"]) > 6:
...       label.grid_forget()

【讨论】:

  • 太棒了!这就是我要找的东西!不过,问题是,如果我不知道小部件名称,我将如何做到这一点?
  • 上面的片段清楚地表明:它根本不使用任何 python 端对小部件的引用,而是通过方法调用检索小部件及其位置。 (当然你需要一个父部件的引用)
  • 从 2020 年开始,这仍然是一个非常可行的选择。干得好@jsbueno。
猜你喜欢
  • 2012-09-04
  • 2021-12-07
  • 1970-01-01
  • 2017-02-16
  • 2019-06-04
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
相关资源
最近更新 更多