2017-03-04 65 views
0

我试图显示保存在逐行文本文件中的用户列表,并在人们启动并关闭我的程序时更新它分别。我不知道如何更新标签创建新的和删除不再出现在文本文件中,因为我不能.set().config()他们据我所知,因为标签上的实际文本没有必须改变。如何动态添加从文本文件中删除和删除for循环中创建的标签

这是我的代码到目前为止。

def list_users(self): 
    with open("usercheck.txt", "r") as ulst: 
     self.usr_list = [] 
     for line in ulst: 
      self.usr_list.append(line) 

def online(self): 
    for self.name in self.usr_list: 
     self.onlbl = tk.Label(self, text = self.name,bg = "#42f480") 
     self.onlbl.grid(row = self.onlcnt,column = 5,padx = 0) 
     self.onlcnt +=1 

运行online功能与after只是创建相同标签的重复和不更新标签的数量。 self.onlcnt为0

+0

这将有助于如果您发布了[MCVE],包括一个小样本“usercheck。 txt“,以便我们可以运行程序并重现问题。另外,“当人们分别启动并关闭我的程序时进行更新”有点不清楚。你的意思是人们何时启动并关闭这个Tkinter程序本身,或者你是在谈论其他一些程序? –

+1

我的意思是tkinter程序本身。有问题的文本文件只是不同行上的名称列表,例如: 道格拉斯 本 詹姆斯。格式不真正进行评论。尽管每个名字都有自己的路线。 –

回答

0

原因可能是您在循环变量中使用了self关键字,导致变量保持不变:不。

def online(self): 
    for name in self.usr_list: 
     self.onlbl = tk.Label(self, text = name,bg = "#42f480") 
     self.onlbl.grid(row = self.onlcnt,column = 5,padx = 0) 
     self.onlcnt +=1 

你也可能希望将Labels存储在list,所以你可以稍后访问它们:

def online(self): 
    try: 
     self.labels 
    except AttributeError: 
     self.labels = [] 
    self.onlcnt = 0 
    for name in self.usr_list: 
     onlbl = tk.Label(self, text = name,bg = "#42f480") 
     onlbl.grid(row = self.onlcnt,column = 5,padx = 0) 
     self.labels.append(onlbl) 
     self.onlcnt +=1 
    root.after(5000, self.online) #run it again 
+0

不知道是否它的一个不同版本的python,但NameError是AttributeError:对我来说。我不知道如何动态更新标签,因为它们仍然由“onlbl = ...”中的for循环创建。我需要标签每隔几秒更新一次。对不起,如果我在这里丢失了一些明显的东西 –

相关问题