2012-09-11 121 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