[파이썬] Tkinter에서 리스트박스 내 순서 변경하는 방법
Tkinter에서 Listbox에서 선택된 항목의 순서를 변경하는 방법은 다음과 같습니다
import tkinter as tk
def move_up():
index = listbox.curselection()
if index:
index = index[0]
if index > 0:
value = listbox.get(index)
listbox.delete(index)
listbox.insert(index - 1, value)
listbox.selection_clear(0, tk.END)
listbox.selection_set(index - 1)
def move_down():
index = listbox.curselection()
if index:
index = index[0]
if index < listbox.size() - 1:
value = listbox.get(index)
listbox.delete(index)
listbox.insert(index + 1, value)
listbox.selection_clear(0, tk.END)
listbox.selection_set(index + 1)
# Tkinter GUI 생성
root = tk.Tk()
# Listbox 생성
listbox = tk.Listbox(root)
listbox.pack()
# Listbox에 아이템 추가
listbox.insert(tk.END, "Item 1")
listbox.insert(tk.END, "Item 2")
listbox.insert(tk.END, "Item 3")
listbox.insert(tk.END, "Item 4")
# "Up" 버튼 생성 및 이벤트 연결
button_up = tk.Button(root, text="Up", command=move_up)
button_up.pack()
# "Down" 버튼 생성 및 이벤트 연결
button_down = tk.Button(root, text="Down", command=move_down)
button_down.pack()
# GUI 실행
root.mainloop()
위의 예제는 Listbox 위에 "Up" 버튼과 "Down" 버튼을 추가하여 선택된 아이템의 순서를 위로 올리거나 아래로 내릴 수 있도록 구성되어 있습니다. "Up" 버튼을 클릭하면 선택된 아이템이 한 칸 위로 이동하고, "Down" 버튼을 클릭하면 선택된 아이템이 한 칸 아래로 이동합니다.
Listbox에서 현재 선택된 아이템의 인덱스를 가져와서 delete() 메소드로 삭제한 후, insert() 메소드를 사용하여 원하는 위치에 다시 삽입하는 방식으로 아이템의 순서를 변경할 수 있습니다. 선택된 아이템의 순서를 변경한 후에는 selection_clear() 메소드로 이전 선택을 해제하고, selection_set() 메소드로 새로운 위치를 선택하도록 설정합니다.
이 예제를 실행해보면 Listbox에서 선택된 아이템의 순서를 변경할 수 있는 기능을 확인할 수 있습니다.