Python 在Tkinter中的小部件上循环
我想到的问题是: 我在框架中有许多类似的小部件(例如标签)。我在算法的每次迭代中都会更新它们(在相关函数中使用Python 在Tkinter中的小部件上循环,python,loops,widget,tkinter,Python,Loops,Widget,Tkinter,我想到的问题是: 我在框架中有许多类似的小部件(例如标签)。我在算法的每次迭代中都会更新它们(在相关函数中使用root.update()),我想知道的是如何循环遍历每个标签 当然,它们是用类似 self.var1=IntVar() self.lab1=Label(frame,textvariable=self.var1) self.lab1.grid() 因此,每个标签都被命名为lab1、lab2等。我确信应该有更好的命名方法,这样我就不必显式地调用每个名称,或者以某种方式循环调用它们。最简
root.update()
),我想知道的是如何循环遍历每个标签
当然,它们是用类似
self.var1=IntVar()
self.lab1=Label(frame,textvariable=self.var1)
self.lab1.grid()
因此,每个标签都被命名为lab1、lab2等。我确信应该有更好的命名方法,这样我就不必显式地调用每个名称,或者以某种方式循环调用它们。最简单的方法是将对每个小部件的引用存储在列表或字典中,而不是(或添加到)scaler实例变量。您的一致名称方案允许您使用变量名称迭代变量:
for i in range(1,n):
label = getattr(self, "lab"+str(i))
您还可以考虑依赖TKiTter来保持您的小部件的树结构,可以通过<代码>儿童< /COD>小部件属性(字典)访问:
如果您的框架包含其他小部件,则最终添加一些筛选。例如,要对小部件类进行筛选:for label in filter(lambda w:isinstance(w,Label), frame.children.itervalues()):
#do something on labels
请注意,子项对顺序遍历没有任何保证。对于此类服务,您可以依赖几何体管理器信息,即pack\u slaves
或grid\u 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
你的意思是类似于
list1=[self.var1,self.var2]
然后循环通过list1[list]
?
for child in frame.pack_slaves():
#traverse in pack addition order
#or
for child in reversed(frame.grid_slaves()):
#traverse in grid addition order