如何在 tkinter 中从网格中删除小部件?

13 投票
1 回答
35818 浏览
提问于 2025-04-18 03:32

我在一个tkinter的框架里有一个网格,用来显示查询结果。这个网格里有一个日期字段,用户可以手动更改这个日期,然后这个日期会作为查询的参数来获取结果。每次日期改变时,结果自然会变化,可能会有不同数量的行。如果第二次查询的结果行数少了,那么之前的查询结果行就会留在下面,这样会让人很困惑。

我想问的是,怎么才能删除框架中所有行号大于6的行(不管里面有什么内容)呢?

顺便说一下,我使用的是Python 3.3.3。谢谢!

1 个回答

24

调用 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()

撰写回答