2015-10-17 108 views
0

我想创建一个标签并同时分配它。 例如,在循环中同时创建和设置变量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() 

这仅仅是一个例子须藤。我只想生成n个标签,我不知道n的值,并且每次更新时它都会更改。我正在使用root.update()来更新标签。谁可以帮我这个事?

在此先感谢。

+0

您使用的是相同的伊娃所有所以他们都将包含相同的数字(是你想解决的问题?)。请注意,您的代码不会像这样运行,因为Python不支持r ++语法AFAIK。 –

+0

是的。它在所有变量中显示相同的值。而且我没有像现在这样使用代码。这只是一个伪代码。那么没有其他选择来解决这个问题了? – user3363416

回答

0

我通常将它们保存在一个列表中,这是一种方便的方式来保存对它们的引用。请不要使用I,L,或O作为单一的数字变量,因为它们可以像数字,即 I = 1 我= 1 L = 0

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() 
+0

非常感谢Joe!有效.. – user3363416