12
votes

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!

1
Please post some code to give me an idea of how you've set your code up so the response makes sense. - Amazingred
also see Brian Oakley's answer here that pretty much does what your asking doesn't it? - Amazingred

1 Answers

23
votes

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