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 function. What I'd like to know, is how to loop through each Label.
Of course, they were created with something like
self.var1=IntVar()
self.lab1=Label(frame,textvariable=self.var1)
self.lab1.grid()
So each of the lables are named lab1,lab2, etc. I'm quite sure there should either be a better way of naming them, so that I don't have to call each name explicitly, or somehow loop though them.
Your consistant name scheme let you use the variable name to iterate through your variables:
for i in range(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
#or
for child in reversed(frame.grid_slaves()):
#traverse in grid addition order
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With