rodrigocf
rodrigocf

Reputation: 2099

How to remove widgets from grid in tkinter?

I have a grid in a tkinter frame which displays query results. It has a date field that is changed manually and then date is used as a parameter on the query for those results. every time the date is changed, obviously the results change, giving a different amount of rows. The problem is that if you get less rows the second time you do it, you will still have results from the first query underneath those and will be very confusing.

My question is, how can i remove all rows from the frame that have a row number greater than 6 (regardless of what's in it)?

By the way, I'm running Python 3.3.3. Thanks in advance!

Upvotes: 13

Views: 37914

Answers (1)

jsbueno
jsbueno

Reputation: 110301

Calling the method grid_forget on the widget will remove it from the window - this example uses the call grid_slaves on the parent to findout all widgets mapped to the grid, and then the grid_info call to learn about each widget's position:

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

Upvotes: 24

Related Questions