2017-04-14 4 views
1

elide를 사용하여 정보 섹션을 숨길 수있는 태그가있는 텍스트 위젯을 설정했습니다. 그것은 정상적인 항목으로 잘 작동하지만, 필자가 elide를 사용하여 텍스트의 큰 섹션을 숨기면 성능이 저하되는 것을보고 있습니다. 내가 알아 차 렸던 텍스트 파일은 ~ 53,000 줄이고 작은 파일의 영향은 적습니다. 프로그램은 잘 실행되고 스크롤 할 수 있으며, 텍스트 섹션을 숨길 때까지 문제없이 윈도우에서 이동할 수 있습니다. elide를 사용하여 텍스트를 숨길 때 성능에 영향이 있음

from tkinter import * 
master = Tk() 

file = 'file\path' 
file1 = 'file\path' 
file2 = 'file\path' 
file3 = 'file\path' 
file4 = 'file\path' 
file5 = 'file\path' 
file6 = 'file\path' 
file7 = 'file\path' 
list = [file, file1, file2, file3, file4, file5, file6, file7] 


def _toggle_visibility(event, widg): 
    global txt 
    try: 
     block_start, block_end = _get_block("insert", widg) 
    except: 
     return 
    next_hidden = widg.tag_nextrange("hidden", block_start, block_end) 
    if next_hidden: 
     widg.tag_remove("hidden", block_start, block_end) 
    else: 
     widg.tag_add("hidden", block_start, block_end) 
def _get_block(index, widg): 
    global txt 
    '''return indicies after header, to next header or EOF''' 
    start = widg.index("%s lineend+1c" % index) 
    next_header = widg.tag_nextrange("header", start) 
    if next_header: 
     end = next_header[0] 
    else: 
     end = widg.index("end-1c") 
    return (start, end) 

txt = Text(master) 
txt.grid() 
txt.tag_configure("header", foreground="#9b3e96") # , spacing1=10, spacing3=10) 
txt.tag_bind("header", "<Double-1>", lambda event: _toggle_visibility(event, txt)) 
txt.tag_configure("hidden", elide=True) 


for item in list: 
    with open(item) as f: 
     h = f.readlines() 
     txt.insert('end', '==============================================\n ', 'header') 
     txt.insert('end', h) 
master.mainloop() 

복제하려면

정말 큰 텍스트 파일의 소수를 얻을 수 및 텍스트 위젯에 모두 덤프 위의 코드를 사용 (7 일 필요는 없습니다). 그런 다음 "=============================================================================================================== === "해당 파일의 모든 텍스트를 최소화합니다. 인쇄 된 마지막 파일을 최소화하면 모든 것이 잘 동작합니다. 첫 번째 문자를 최소화하면 문자를 강조 표시하고 창의 아무 곳이나 클릭하여 느린 응답을 보게됩니다.

'elide'가 true로 설정되면 어떻게됩니까?

pyinstaller로 exe 파일을 만든 후에 pycharm과 다른 컴퓨터에서이 파일을 테스트했습니다.

+1

elide의 성능 문제는 Tcl/Tk 버전 8.7에서 수정 될 것입니다. –

+0

@BradLanam GA로 전환 할 때 8.7 릴리즈를 볼 수있는 가장 좋은 곳은 어디입니까? 또한,이 표시를 할 수 있도록 대답해야합니까? – sidnical

답변

2

텍스트 위젯은 현재 전체 재 작성 및 광범위한 테스트를 진행하고 있습니다. 새로운 버전은 Tcl/Tk 버전 8.7에서 더 나은 elide 성능을 제공해야합니다.

새 버전의 공지 사항은 일반적으로 comp.lang.tcl 뉴스 그룹에서 작성됩니다. 새 버전은 기본 웹 사이트 http://www.tcl.tk/에서도 발표 될 예정입니다.

인력 및 시간 제약으로 인해 출시시기에 대한 예측이 없습니다. 내 기대 (추측)는 8.6.7 버그 수정 릴리즈이며, 그 후 8.7 일 것입니다.