Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Tkinter에서 자동 완성 기능이 있는 콤보박스 만드는 방법

Tkinter의 콤보박스(Combobox) 위젯은 애플리케이션에서 드롭다운 메뉴를 구현할 때 가장 유용하게 활용되는 위젯 중 하나입니다. 내부적으로 Entry 위젯과 Listbox 위젯을 결합한 구조로 되어 있어, Entry 필드에 항목 이름을 직접 입력해 메뉴 항목을 선택할 수 있습니다. 다만 실제 개발 과정에서는 사용자 편의성을 높이기 위해 자동 완성(Auto-completion) 기능을 갖춘 콤보박스가 필요한 경우가 종종 있습니다.

자동 완성 콤보박스의 동작 원리

자동 완성 기능이 있는 콤보박스를 만들려면 먼저 메뉴 목록을 표시할 Listbox와 선택된 메뉴를 보여줄 Entry 위젯을 생성합니다. 그다음 Entry 위젯에 "KeyRelease" 이벤트를 바인딩하면, 사용자가 키를 누를 때마다 입력된 키워드로 목록을 검색하고 일치하는 항목만 남겨 Listbox를 실시간으로 갱신할 수 있습니다.

예제 코드

이 예제에서는 아래 두 가지 함수를 구현합니다.

  • check(e): 입력한 값이 목록에 존재하는지 확인합니다. 입력된 키워드와 일치하는 항목이 있으면 해당 데이터로 목록을 갱신합니다.
  • update(data): 전달받은 데이터를 Listbox에 삽입해 화면을 갱신합니다.
# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import ttk

# tkinter 프레임 또는 윈도우 인스턴스 생성
win= Tk()

# 윈도우 크기 설정
win.geometry("700x350")

# 윈도우 제목 설정
win.title("Combobox- TutorialsPoint")

# 목록에서 일치하는 항목으로 Entry 위젯 업데이트
def check(e):
   v= entry.get()
      if v=='':
      data= values
   else:
      data=[]
      for item in values:
         if v.lower() in item.lower():
            data.append(item)
   update(data)

def update(data):
   # 콤보박스 비우기
   menu.delete(0, END)
   # 콤보박스에 값 추가
   for value in data:
      menu.insert(END,value)


# Label 위젯 추가
label= Label(win, text= "Demo Combobox Widget", font= ('Helvetica 15 bold'), background= "green3")
label.pack(padx= 10, pady= 25)

# 하단 Label 추가
text= Label(win, text="Select a Programming Language")
text.pack(padx= 15,pady= 20)

# Entry 위젯 생성
entry= Entry(win, width= 35)
entry.pack()
entry.bind('<KeyRelease>',check)

# 항목 목록을 표시할 Listbox 위젯 생성
menu= Listbox(win)
menu.pack()

# 모든 메뉴 항목 리스트 생성
values= ['Python', 'C++', 'Java','Ruby on Rails', 'Rust', 'GoLang','Objective-C', 'C# ', 'PHP', 'Swift', 'JavaScript']

# 콤보박스에 값 추가
update(values)

# 콤보박스 클릭 이벤트 바인딩

win.mainloop()

실행 결과

위 Python 스크립트를 실행하면 Entry 위젯과 Listbox가 배치된 창이 나타납니다. 키워드를 입력할 때마다 입력값과 일치하는 항목만 골라 Listbox가 실시간으로 갱신되므로, 사용자가 원하는 프로그래밍 언어를 빠르게 찾아 선택할 수 있습니다.