Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Tkinter中的小部件上循环_Python_Loops_Widget_Tkinter - Fatal编程技术网

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