Looping Over Widgets In Tkinter
here's the issue I'm thinking of: I have a number of similar widgets in the frame(e.g. Lables). I update them every iteration of the algorithm (using root.update() in the relevant
Solution 1:
Your consistant name scheme let you use the variable name to iterate through your variables:
for i inrange(1,n):
label = getattr(self, "lab"+str(i))
You may also consider relying on Tkinter whom retain a tree structure of your widgets accessible through children
widget attribute (a dictionary):
for child in frame.children.values():
#do something to all children
And eventually add some filtering if your frame contains other widgets. For instance, to filter on classes of widgets:
for label in filter(lambda w:isinstance(w,Label), frame.children.itervalues()):
#do something on labels
Note that children does not have any guarantee on order traversal. For such service, you may rely on geometry manager infos, ie pack_slaves
or grid_slaves
:
for child in frame.pack_slaves():
#traverse in pack addition order#orfor child inreversed(frame.grid_slaves()):
#traverse in grid addition order
Solution 2:
The easiest way is to store references to each widget in a list or dictionary rather than (or in addition to) scaler instance variables.
Post a Comment for "Looping Over Widgets In Tkinter"