在循环tkinter中同时创建和设置变量

时间:2015-10-17 18:02:08

标签: python-3.x tkinter

我想创建一个标签并同时分配它。 例如,

ivar=StringVar()
for i in range(0,len(str)):
   w = Label(master, textvariable=ivar)
   w.grid(row=r,column=c)
   ivar.set(i)
   r++
   c++
.......
root.update()

这只是一个sudo的例子。我只想生成n个标签,我不知道n的值,每次更新时它都会改变。我使用root.update()来更新标签。任何人都可以帮我吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我通常将它们保存在列表中,这是一种方便的方法来保存对它们的引用。请不要使用i,l或o作为单个数字变量,因为它们看起来像数字,即 I = 1 I =升 升= O

import sys
if sys.version_info[0] < 3:
    import Tkinter as tk     ## Python 2.x
else:
    import tkinter as tk     ## Python 3.x

class TestLabels():
    def __init__(self, parent, num_labels):
        self.parent = parent
        self.string_var_list=[]
        tk.Button(self.parent, text="Exit", command=self.parent.quit,
                  bg="orange").grid(row=100)
        self.create_labels(num_labels)

        ## change one label
        str_var=self.string_var_list[10]
        str_var.set("***changed***")

    def create_labels(self, num_labels):
        """create labels, 5 to a row
        """
        r=0
        c=0
        colors=["lightblue", "yellow", "white", "pink", "lightgreen"]
        for ctr in range(num_labels):
            s_var=tk.StringVar()
            ## won't save the Label ID since you use StringVar to change it
            tk.Label(self.parent, textvariable=s_var,
                     bg=colors[c]).grid(row=r, column=c, sticky="nsew")
            s_var.set("Label #%d" % (ctr))
            self.string_var_list.append(s_var)
            c += 1
            if c > 4:
                c=0
                r += 1

if __name__ == "__main__":
    root = tk.Tk()
    MA=TestLabels(root, 14)
    root.mainloop()