2024. 3. 3. 18:57ㆍGUI/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 목록 상자 위젯 예
다음 프로그램은 프로그래밍 언어 목록이 포함된 목록 상자를 표시합니다. 하나 이상의 항목을 선택하면 프로그램은 선택한 항목을 메시지 상자에 표시합니다.
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)
목록 상자에 스크롤바 추가하기
다음 프로그램은 목록 상자에 스크롤 막대를 추가하는 방법을 보여줍니다.
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 |