IT

[파이썬] Tkinter에서 리스트박스 내 순서 변경하는 방법

하이썬 2023. 7. 12. 23:56
반응형

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에서 선택된 아이템의 순서를 변경할 수 있는 기능을 확인할 수 있습니다.

반응형