这是我正在考虑的问题:
我在框架中有许多类似的小部件(例如Lables)。我在算法的每次迭代中更新它们(在相关函数中使用root.update()
。我想知道的是如何遍历每个Label。
当然,它们是用
之类的东西创建的self.var1=IntVar()
self.lab1=Label(frame,textvariable=self.var1)
self.lab1.grid()
所以每个标签都被命名为lab1,lab2等。我很确定应该有更好的方法来命名它们,这样我就不必明确地调用每个名字,或以某种方式循环它们
答案 0 :(得分:7)
您的一致名称方案允许您使用变量名来迭代变量:
for i in range(1,n):
label = getattr(self, "lab"+str(i))
您也可以考虑依赖Tkinter,他们通过children
小部件属性(字典)保留您的小部件的树结构:
for child in frame.children.values():
#do something to all children
如果你的框架包含其他小部件,最后会添加一些过滤。例如,要过滤小部件类:
for label in filter(lambda w:isinstance(w,Label), frame.children.itervalues()):
#do something on labels
请注意,儿童在订单遍历方面没有任何保证。对于此类服务,您可以依赖几何管理器信息,即pack_slaves
或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
答案 1 :(得分:1)
最简单的方法是在列表或字典中存储对每个窗口小部件的引用,而不是(或除了)缩放器实例变量。