2014-02-25 4 views
1

나는 파이썬 &의 tkinter에서 텍스트 편집기의 자동 완성 기능을 만들고 있습니다. 현재 자동 완성 프로세스는 다음과 같습니다.자동 완성을위한 tkinter 팝업 및 텍스트 처리

자동 완료 사전과 같은 입력이있는 경우 popup으로 전화하십시오.

나는 t_start.bind("<Key>", asprint)을 통해이를 수행합니다. 여기서 asprint은 제 팝업 기능입니다. 이스케이프 버튼이나 다른 곳을 클릭하여 팝업을 벗어날 수 있습니다. 내가 원하는 것은 - 사용자가 텍스트 키를 누를 때 팝업을 다시 트리거하고 자동 완성에서 검색 범위를 좁히는 것입니다.

F-> FI-> 여과 된> FILE 일의

종류. 나는 팝업이 열린 후에 그 입력을 얻기 위해 무엇을 사용해야하는지 모른다. 2 위와 이후의 모든 입력 문자를 얻으려면 어떻게해야합니까?

팝업 기능은 다음과 같습니다

def popup(event): 
    selected_text='' 
    try: 
     selected_text=t_start.get("sel.first", "sel.last") 
    except TclError: 
     for i in range(len(selected_text)): 
      if selected_text[i:0]==word[i:0]: 
       menu.add_command(label="%s" %selected_text, command=insert_word) 
       menu.delete(0) 
      else: 
       pass 
     menu.tk_popup(event.x_root, event.y_root) 
+0

귀하의 팝업 기능은 어떤 모습입니까? – atlasologist

+0

방금 ​​질문에 추가했습니다 – kaboom

답변

0

의 핵심은 사용자의 입력 위젯에 키보드 포커스를 유지하는 것입니다. 창을 팝업 할 때, 포커스가 입력 위젯에 머물러 있는지 (또는 반환되는지) 확인하십시오. 팝업에 영향을 미치는 모든 이벤트는 팝업 창이 아닌 입력 위젯에 첨부되어야합니다.

그러나 메뉴를 팝업으로 사용하는 경우에는 불가능합니다. 메뉴가 닫힐 때까지 모든 이벤트를 도용하기 때문에 메뉴는 자동 완성 기능에 대한 잘못된 선택입니다. 팝업이 윈도우 내부에 임베드되기를 원하면 Toplevel widget ("float") 또는 다른 위젯 (listbox, text, canvas 등)의 인스턴스 여야합니다.

포함 된 창을 사용하여 자동 완성을 수행하는 방법을 제공하는 ActiveState의 레시피가 있습니다. http://code.activestate.com/recipes/578253-an-entry-with-autocompletion-for-the-tkinter-gui/

+0

답장을 보내 주셔서 감사합니다. 내가 말했어야만 - 나는 이것을 텍스트 필드 위에해야한다. 추천하는 방법은 내 텍스트 필드 안에 목록을 넣고 거기에만 적용됩니다. 전체 텍스트 필드에 어떻게 적용합니까? – kaboom

관련 문제