2012-09-11 4 views
0

Tkinter에서 텍스트 위젯의 내용을 어떻게 제거 할 수 있습니까? 내 프로그램에서 나는 그것을 실행 로그를 표시하는 데 사용했습니다. 특정 줄 번호 제한이 달성 된 후에 표시하는 줄 수를 제한하려면 이전 내용을 병렬로 제거하고 싶습니다. 아래는 Text Widget에서 컨텐츠 수정을 수행하는 코드 스 니펫입니다. 보시다시피, 25 행을 삽입 한 후에는 "delete"메서드를 사용하여 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

"delete"는 정수 인수를 사용해야하지만 아마 나는 미친 듯합니다. – mgilson

+0

@mgilson : Delete는 "line.column"(또는 태그 이름)으로 표시되는 인덱스를 사용합니다. –

+0

@BryanOakley - 저를 청소 해 주셔서 감사합니다. 나는 그 대답이 "mgilson, 너 미쳤다"라고 생각한다. – mgilson

답변

1

당신의 self.linecount 변수가 경계없이 성장 나타납니다, 당신은 몇 줄을 삭제하는 고려하지 않습니다. 그래서, 당신은> 25 라인을 가지고, write 때마다 한 라인을 삭제합니다 호출됩니다.

텍스트 위젯에 스크롤바를 부착 할 수 있다는 사실을 알고 계십니까? 사실상 무제한 텍스트를 허용하고 사용자가 스크롤하여 이전 데이터를 볼 수있게합니다.

+0

이미 텍스트 위젯에서 스크롤 막대를 사용했습니다. 하지만 2 만 줄을 표시하고 싶지는 않습니다. linecount 변수 한도를 확인하겠습니다. – sarbjit

+0

당신은 옳았습니다. 라인 카운트 변수는 라인 삭제를 고려하지 않았습니다. 또한, 나는 쓰기 명령이 한 행에 두 번 (하나는 데이터가 있고 다른 하나는 \ n) 호출된다는 것을 알았다. – sarbjit

관련 문제