2012-05-23 3 views
2

내 문제 : 필자가 작성한 Tkinter 편집기에서 필자가 작성한 시점에서 파일을 다시로드하고 다시 열어야하는 경우가있다.커서를 반환하는 텍스트 위젯

내 1 다시로드 시도가 텍스트 내 텍스트 위젯입니다이

pos=config.text.index(INSERT)   # memorize where I am 
...         # do stuff 
textopen_and_display(currentfn)  # reopen it 
text.mark_set(INSERT,pos)   # go 
text.see(INSERT)     # there 

입니다. 문제는이 방법으로 호출 된 .see() 메서드가 내가 원하는 것을하지 않는다는 것입니다. 즉, INSERT를 볼 수있을만큼 아래로 스크롤하고 중지합니다. 파일 맨 위가 보이는 첫 번째 줄에 있지 않으면 작동하지 않습니다.

내가 필요한 것은 텍스트 위젯의 마지막으로 보이는 행의 색인 : 어떻게 찾을 수 있습니까? 이 색인에서 .see()를 사용하면 원하는 방식으로 작동합니다.

P. 나는 작은 크기 (높이 = 5)로 정의했기 때문에 런타임에 텍스트 위젯 높이를 찾을 수조차 없다. fill = BOTH, expand = 1로 패킹했다.

x_pos = text.xview()[0] 
y_pos = text.yview()[0] 

스크롤 위치를 복원하려면 : 5

+0

당신은'winfo_height' 메서드를 호출하여 런타임에 실제 높이를 얻을 수 있습니다 - 실제 높이를 반환합니다. –

답변

2

의 초기화 값은 스크롤 위치를 저장하려면

text.xview(Tkinter.MOVETO, x_pos) 
text.yview(Tkinter.MOVETO, y_pos) 
+0

내 하루를 저장했습니다. 감사합니다. 경고 : 저는 "틴터 (Tkinter)"를 제거해야했습니다. 접두어를 MOVETO 인수에 추가하면 이유는 알 수 없습니다. – alessandro

+1

@alessandro : 'from Tkinter import *'와 'import Tkinter'의 차이점입니다. –

관련 문제