[Python GUI tkinter] column 정렬방법

최근 tkinter를 이용해서 GUI를 학습하고 있었는데 tkinter를 잘 안쓰는지 제가 검색을 잘 못하는건지
생각보다 예제소스가 너무 안나와서 난황을 겪고 있습니다.
그래서 습득한 지식을 공유하고자 컬럼정렬 소스관련하여 포스팅하고자 합니다.
참고로 파린이라 문맥이나 로직이 깔끔하지 않을 수 있습니다. ^^;;

저는 아래 링크와 스택 오버플로우에서 검색하여 도움을 받고 있습니다.

실행화면

디폴트 화면
name 컬럼 오름차순
name 컬럼 내림차순

tkinter treeview 컬럼 정렬 예제소스

import tkinter as tk
import tkinter.ttk as ttk

# 창 생성정보
width = "500"
height = "300"
x = "+50"
y = "+30"
app = tk.Tk()
app.title("test")
app.geometry("{}x{}{}{}".format(width,height,x,y))
app.resizable(0,0)

# 정렬함수
def treeview_sort_column(tv, col, reverse):
    # 트리뷰 값 리스트로 만들어주기
    l = [(tv.set(k, col), k) for k in tv.get_children('')]
    
    # 정렬
    l.sort(reverse=reverse)
    
    # 리스트 move를 사용하여 값 순서 변경
    for index, (val, k) in enumerate(l):
        tv.move(k, '', index)

    # 컬럼헤딩 command 매개변수 변경(reverse와 not reverse 순차적으로 실행되기 위함)
    tv.heading(col, command=lambda _col=col: treeview_sort_column(tv, _col, not reverse))
               
# treeview 설정
columns = ('name', 'age')
treeview = ttk.Treeview(app, columns=columns, show='headings')
treeview.pack()
treelist = [('홍길동',65),('이순신',20),('강감찬',50),('권철환',33),('권율',22)]

# treeview 데이터 입력
for i in range(len(treelist)):
    treeview.insert("",tk.END,text=i,iid=i ,values=treelist[i])
# treeview 컬럼헤딩 command 설정
for col in columns:
    treeview.heading(col, text=col, command=lambda _col=col: treeview_sort_column(treeview, _col, False))

app.mainloop()

제 글이 많은 도움이 되셨으면 좋겠습니다.

파이썬에 관한 더 많은 정보가 필요하시면 아래링크를 클릭해주세요.