Tkinter Listbox

2024. 3. 3. 18:57GUI/tkinter

요약 : 이 튜토리얼에서는 Tkinter Listbox 위젯을 사용하여 항목 목록을 표시하는 방법을 배웁니다.

Tkinter 목록 상자 소개

목록 상자 위젯은 한 줄 텍스트 항목의 목록을 표시합니다. 목록 상자를 사용하면, 항목을 탐색하고 한 번에 하나 또는 여러 항목을 선택할 수 있습니다.

목록 상자를 만들려면, 다음과 같은 tk.Listbox 클래스를 사용합니다.

listbox = tk.Listbox(container, listvariable, height)

이 구문에서는:

  • container : 목록 상자의 상위 구성 요소입니다.
  • listvariable : tkinter.Variable 개체에 대한 링크 입니다. 이에 대해서는 나중에 더 자세히 설명하겠습니다.
  • height : 목록 상자가 스크롤하지 않고 표시할 항목 수입니다 .

목록 항목

목록 상자에 항목을 채우려면, 먼저 항목 목록으로 초기화되는 Variable 개체를 만듭니다. 그런 다음 Variable 개체를 다음과 같이 listvariable 옵션 에 할당합니다.

list_items = tk.Variable(value=items)
listbox = tk.Listbox(
    container,
    height,
    listvariable=list_items
)

목록 상자의 항목을 추가, 제거 또는 재정렬하려면 list_items 변수를 수정하기만 하면 됩니다.

모드 선택

이 selectmode 옵션은 선택할 수 있는 수와 마우스 드래그가 항목에 미치는 영향을 결정합니다.

  • tk.BROWSE – 단일 선택이 가능합니다. 항목을 선택하고 다른 줄로 드래그하면 선택 항목이 마우스를 따라갑니다. 이것이 기본값입니다.
  • tk.EXTENDED – 첫 번째 항목을 클릭하고 마지막 줄까지 끌어서 인접한 항목 그룹을 한 번에 선택합니다.
  • tk.SINGLE – 한 줄을 선택할 수 있으며 마우스를 끌 수 없습니다.
  • tk.MULTIPLE – 한 번에 여러 줄을 선택합니다. 라인을 클릭하면 선택 여부가 전환됩니다.

선택한 이벤트 바인딩

선택한 항목이 변경될 때 함수를 실행하려면 해당 함수를 <>. 이벤트에 바인딩합니다

listbox.bind('<>', callback)

Tkinter 목록 상자 위젯 예

다음 프로그램은 프로그래밍 언어 목록이 포함된 목록 상자를 표시합니다. 하나 이상의 항목을 선택하면 프로그램은 선택한 항목을 메시지 상자에 표시합니다.

In [4]:
import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showinfo

# create the root window
root = tk.Tk()
root.title('Listbox')


# create a list box
langs = ('Java', 'C#', 'C', 'C++', 'Python',
         'Go', 'JavaScript', 'PHP', 'Swift')

var = tk.Variable(value=langs)

listbox = tk.Listbox(
    root,
    listvariable=var,
    height=9,
    selectmode=tk.EXTENDED
)

listbox.pack(expand=True, fill=tk.BOTH)


def items_selected(event):
    # get all selected indices
    selected_indices = listbox.curselection()
    # get selected items
    selected_langs = ",".join([listbox.get(i) for i in selected_indices])
    msg = f'You selected: {selected_langs}'
    showinfo(title='Information', message=msg)


listbox.bind('<<ListboxSelect>>', items_selected)

root.mainloop()

 

방식.

먼저 프로그래밍 언어 목록이 포함된 Variable를 만듭니다.

langs = ('Java', 'C#', 'C', 'C++', 'Python',
        'Go', 'JavaScript', 'PHP', 'Swift')

var = tk.Variables(value=langs)

둘째, 새 Listbox 위젯을 만들고 var 개체를 listvariable에 할당합니다.

listbox = tk.Listbox(
    root,
    listvariable=var,
    height=6,
    selectmode=tk.EXTENDED
)

셋째, 하나 이상의 항목을 선택할 때 호출될 함수를 정의합니다. 이 items_selected() 함수는 현재 선택된 목록 항목의 목록을 표시합니다.

def items_selected(event):
    # get all selected indices
    selected_indices = listbox.curselection()

    # get selected items
    selected_langs = ",".join([listbox.get(i) for i in selected_indices])
    msg = f'You selected: {selected_langs}'
    showinfo(title='Information', message=msg)

마지막으로 items_selected 함수를 '<>' 이벤트와 바인딩합니다.

listbox.bind('<>', items_selected)

목록 상자에 스크롤바 추가하기

다음 프로그램은 목록 상자에 스크롤 막대를 추가하는 방법을 보여줍니다.

In [8]:
import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showinfo

# create the root window
root = tk.Tk()

root.title('Listbox')


# create a list box
langs = ('Java', 'C#', 'C', 'C++', 'Python',
         'Go', 'JavaScript', 'PHP', 'Swift')

var = tk.Variable(value=langs)

listbox = tk.Listbox(
    root,
    listvariable=var,
    height=6,
    selectmode=tk.EXTENDED)

listbox.pack(expand=True, fill=tk.BOTH, side=tk.LEFT)

# link a scrollbar to a list
scrollbar = ttk.Scrollbar(
    root,
    orient=tk.VERTICAL,
    command=listbox.yview
)

listbox['yscrollcommand'] = scrollbar.set

scrollbar.pack(side=tk.LEFT, expand=True, fill=tk.Y)


def items_selected(event):
    # get selected indices
    selected_indices = listbox.curselection()
    # get selected items
    selected_langs = ",".join([listbox.get(i) for i in selected_indices])
    msg = f'You selected: {selected_langs}'

    showinfo(title='Information', message=msg)


listbox.bind('<<ListboxSelect>>', items_selected)

root.mainloop()

 

 

스크롤바를 스크롤 가능한 위젯에 연결하는 방법에 대한 자세한 내용은 스크롤바 위젯 튜토리얼을 확인하세요.

요약

  • 목록 상자 위젯을 생성하려면 tk.Listbox(container, height, listvariable)를 사용하세요 . listvariable는 tk.StringVar(value=items)이어야 합니다.
  • 하나 이상의 목록 항목이 선택되면 함수를 실행하도록 콜백 함수를 '<>' 이벤트에 바인딩합니다.

'GUI > tkinter' 카테고리의 다른 글

Tkinter Spinbox  (0) 2024.03.05
Tkinter Slider  (0) 2024.03.04
Tkinter Combobox  (0) 2024.03.02
Tkinter Radio Button  (0) 2024.03.01
Tkinter Checkbox  (0) 2024.02.29