텍스트 상자 위젯에서 찾은 각 단어로 스크롤하도록 색인을 업데이트하는 방법은 무엇입니까?

마지막 의지

결과적으로 버튼 클릭으로 텍스트 상자에서 일치하는 각 단어를 찾아 스크롤해야합니다. 이 함수는 첫 번째로 일치하는 단어 만 찾습니다. 버튼에 바인딩 된 함수에 업데이트 된 인덱스를 어떻게 공급할 수 있습니까?

def find(idx='1.0'):
    text.tag_remove('found', idx, END)
    s = edit.get()
    if s:
        idx = text.search(s, idx, nocase=1,
                          stopindex=END)
        if not idx:
            return None
  
        foundidx = '%s+%dc' % (idx, len(s))

        text.tag_add('found', idx, foundidx)
        text.see(foundidx)

        text.tag_config('found', foreground='red')
        edit.focus_set()

    return foundidx
아틀라스 435

이를 위해서는 Text위젯을 통해 예제 텍스트를 표시 하는 위젯과 루트가 필요 합니다. 나는 이것을했다 :

import tkinter as tk

root = tk.Tk()

text = tk.Text(root)
text.pack()
text.insert('1.0','''
Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.
Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.
Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.
Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.
Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

text by: https://www.loremipsum.de/
''')

그 후 나는 코멘트 에서 링크 의 지시를 따랐다 . 그리고 위치와 색인을 저장하여 확장했습니다.

countVar = tk.StringVar()
idxVar = tk.StringVar()
posis = []
def search():
    try:
        if idxVar.get():
            new_idx = float(idxVar.get()+countVar.get())
            pos = text.search('sed', new_idx, 'end', count=countVar)
            text.tag_add('search', pos, '%s + %sc' % (pos, countVar.get()))
            text.tag_configure('search', background='green')
            idxVar.set(pos)
            posis.append(pos)
        else:
            pos = text.search('sed', '1.0', 'end', count=countVar)
            text.tag_add('search', pos, '%s + %sc' % (pos, countVar.get()))
            text.tag_configure('search', background='green')
            idxVar.set(pos)
            posis.append(pos)
    except:
        idxVar.set('1.0')

button = tk.Button(root,text='search',command=search)
button.pack()

적어도 나는 Text.see포 시스 목록의 요점으로 점프 하는 방법을 사용했습니다 .

show = tk.IntVar()
show.set(0)

def see():
    if show.get() <= len(posis)-1:
        pos = show.get()
        text.see(posis[show.get()])
        show.set(pos+1)
    else:
        show.set(0)
        

button2= tk.Button(root,text='see', command=see)
button2.pack()

root.mainloop()

나는이 코드가 많이 향상 될 수 있다는 것을 알고 있지만 원리를 보여 주어야하고 나는 그것을 자명하게 코딩하는데 사용했다. 그러나 미해결 질문이있는 경우 알려 주시면이 답변을 개선하겠습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관