2012-09-11 163 views
0

在Tkinter中,我如何從文本部件中刪除內容。在我的程序中,我用它來顯示運行日誌。我想限制顯示的行數,即在達到特定的行數限制後,我想並行刪除舊內容。下面是在Text Widget中進行內容修改的代碼片段。正如你所看到的,一旦插入了25行,我使用「刪除」方法刪除1行。但奇怪的是,在顯示了25行後,它清除了整個小部件,然後在後續的這個類的調用中添加一行,並在一段時間後刪除它。有人可以幫我解決這個問題。從文本部件中刪除內容

class TextRedirector(object): 
    def __init__(self, widget, tag="stdout"): 
     self.widget = widget 
     self.tag = tag 

    def write(self, str): 
     global linecount 
     linecount = linecount + 1 
     self.widget.configure(state="normal") 
     self.widget.insert("end", str, (self.tag,)) 
     self.widget.update() 
     if linecount > 25: 
      self.widget.delete('1.0', '2.0') 
     self.widget.see('end') 
     self.widget.configure(state="disabled") 
+0

在我看來'刪除'應該是整數參數,但也許我只是瘋了... – mgilson

+0

@mgilson:刪除需要表示爲「line.column」(或標籤名稱)的索引。 –

+0

@BryanOakley - 感謝您爲我清理。我想答案是「mgilson,你只是瘋了」。 – mgilson

回答

1

看來你self.linecount變量的增長沒有界限,沒有考慮到要刪除一些行。所以,一旦你有> 25行,每次調用write它將刪除一行。

您是否知道您可以將滾動條附加到文本小部件?這將允許幾乎無限制的文本,並讓用戶回滾查看舊數據。

+0

我已經在我的文本小部件中使用了滾動條。但我不希望它顯示20,000行。我會檢查linecount變量限制。 – sarbjit

+0

你是對的,linecount變量不考慮行刪除。另外,我發現寫命令每行調用兩次(一次使用數據,另一次使用\ n)。 – sarbjit