2017-03-04 64 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循環創建。我需要標籤每隔幾秒更新一次。對不起,如果我在這裏丟失了一些明顯的東西 –