상위 목록: 하위 목록: 작성 날짜: 읽는 데 6 분 소요

Treeview(표)

Treeview을 이용하여 행과 열로 구성된 표를 생성할 수 있습니다.



Treeview 사용

import tkinter
import tkinter.ttk

window=tkinter.Tk()
window.title("YUN DAE HEE")
window.geometry("640x400+100+100")
window.resizable(False, False)

def cc(self):
    treeview.tag_configure("tag2", background="red")

treeview=tkinter.ttk.Treeview(window, columns=["one", "two"], displaycolumns=["two", "one"])
treeview.pack()

treeview.column("#0", width=70)
treeview.heading("#0", text="num")

treeview.column("one", width=100, anchor="center")
treeview.heading("one", text="문자", anchor="e")

treeview.column("#2", width=100, anchor="w")
treeview.heading("two", text="ASCII", anchor="center")

treelist=[("A", 65), ("B", 66), ("C", 67), ("D", 68), ("E", 69)]

for i in range(len(treelist)):
    
    treeview.insert('', 'end', text=i, values=treelist[i], iid=str(i)+"번")

top=treeview.insert('', 'end', text=str(len(treelist)), iid="5번", tags="tag1")
top_mid1=treeview.insert(top, 'end', text="5-2", values=["SOH", 1], iid="5번-1")
top_mid2=treeview.insert(top, 0, text="5-1", values=["NUL", 0], iid="5번-0", tags="tag2")
top_mid3=treeview.insert(top, 'end', text="5-3", values=["STX", 2], iid="5번-2", tags="tag2")

treeview.tag_bind("tag1", sequence="<Button-1>", callback=cc)

window.mainloop()


import tkinter.ttk


상단에 import tkinter.ttk를 사용하여 ttk 모듈을 포함시킵니다.

tkinter.ttk 함수의 사용방법은 tkinter.ttk.*를 이용하여 사용이 가능합니다.


def cc(self):
    treeview.tag_configure("tag2", background="red")

treeview=tkinter.ttk.Treeview(window, columns=["one", "two"], displaycolumns=["two", "one"])
treeview.pack()

treeview.column("#0", width=70)
treeview.heading("#0", text="num")

treeview.column("one", width=100, anchor="center")
treeview.heading("one", text="문자", anchor="e")

treeview.column("#2", width=100, anchor="w")
treeview.heading("two", text="ASCII", anchor="center")

treelist=[("A", 65), ("B", 66), ("C", 67), ("D", 68), ("E", 69)]

for i in range(len(treelist)):
    
    treeview.insert('', 'end', text=i, values=treelist[i], iid=str(i)+"번")

top=treeview.insert('', 'end', text=str(len(treelist)), iid="5번", tags="tag1")
top_mid1=treeview.insert(top, 'end', text="5-2", values=["SOH", 1], iid="5번-1")
top_mid2=treeview.insert(top, 0, text="5-1", values=["NUL", 0], iid="5번-0", tags="tag2")
top_mid3=treeview.insert(top, 'end', text="5-3", values=["STX", 2], iid="5번-2", tags="tag2")

treeview.tag_bind("tag1", sequence="<Button-1>", callback=cc)

tkinter.ttk.Treeview(윈도우 창, 매개변수1, 매개변수2, 매개변수3, ...)을 사용하여 표의 속성을 설정할 수 있습니다.

columns 매개변수로 열의 이름을 설정하며, displaycolumns로 열이 표시되는 순서를 변경할 수 있습니다.

표.column(), 표.heading()을 이용하여 열과 열 제목을 설정할 수 있습니다.

표.insert()를 이용하여 행(항목)을 추가할 수 있습니다.

#0 열은 항상 존재하는 트리 열로, text에 전달한 값이 표시되며 하위 항목을 펼치고 접을 수 있습니다. values에 전달한 값은 columns에서 설정한 열에 순서대로 표시됩니다.

표.insert()는 추가된 항목의 iid를 반환하므로, top 변수를 상위 항목으로 전달하여 하위 항목을 추가할 수 있습니다. 즉, 변수 이름과 iid는 서로 대체하여 사용할 수 있습니다.

표.tag_bind()를 이용하여 tag1 태그가 설정된 항목을 마우스로 클릭할 때 cc 함수가 실행되며, tag2 태그가 설정된 항목의 배경 색상이 변경됩니다.

  • Tip : tag_bind()는 <Button-1>, <Double-Button-1>, <Key> 등 마우스와 키보드 이벤트만 지원합니다. <<TreeviewSelect>>와 같은 가상 이벤트는 표.bind()로 설정해야 합니다.



Treeview Method

표 메서드 (1)

이름 의미
column(col, column_option) 표 열의 속성을 설정
heading(col, heading_option) 표의 열 제목 설정
insert(상위 항목, 삽입 위치, option) 표에 항목을 삽입 위치에 삽입
item(iid, option) iid 값을 가지는 항목을 수정
move(iid, 상위 항목, 삽입 위치) iid 값을 가지는 항목을 상위 항목의 삽입 위치로 이동
reattach(iid, 상위 항목, 삽입 위치) iid 값을 가지는 항목을 상위 항목의 삽입 위치로 이동 (move와 동일)
delete(iid) iid 값을 가지는 항목 삭제
detach(iid) iid 값을 가지는 항목 연결 해제 및 숨김
index(iid) iid 값을 가지는 항목의 index 값 반환
focus(iid) iid 값을 가지는 항목에 포커스
xview() 가로스크롤 연결
yview() 세로스크롤 연결
  • Tip : col : #0은 열의 첫번째 위치를 의미, #1, #2, #3, … 또는 열의 이름1, 열의 이름2, 열의 이름3, …을 이용하여 열을 선택 가능


표 메서드 column_option

이름 의미 기본값 속성
anchor 열 안의 문자열 위치 설정 w n, e, w, s, ne, nw, se, sw, center
width 열의 너비 200 상수
minwidth 열의 최소 너비 20 상수
stretch 위젯 크기 조정 시 열의 너비 조정 설정 여부 True Boolean


표 메서드 heading_option

이름 의미 기본값 속성
text 열 제목의 이름 - 문자열
image 열 제목의 이미지 - -
anchor 열 제목의 문자열 위치 설정 center n, e, w, s, ne, nw, se, sw, center
command 열 제목을 클릭할 때 실행하는 메서드(함수) - 메서드, 함수


표 메서드 option

이름 의미 기본값 속성
text 트리 열(#0)에 표시할 텍스트 - 문자열
image 트리 열(#0)에 포함할 임의 이미지 - -
values 각 열에 순서대로 표시할 값 - list, tuple
open 하위 항목을 펼친 상태로 표시할지 여부 False Boolean
tags 표의 태그 이름 설정 - 문자열, list
iid 표의 고유값 설정 (생략 시 자동 생성) - 문자열


표 메서드 (2)

이름 의미
bbox(iid, column=상수) iid 값을 가지는 행과 column 값의 (width, height, x, y) 값 반환
get_children() 표의 하위 항목 반환
get_children(iid) iid 값을 가지는 하위 항목 반환
set_children(iid, 하위 iid, 하위 iid, … ) iid 값을 가지는 상위 항목에서 하위 iid값을 가지는 항목만 남김
exists(iid) iid 값을 가지는 항목이 있다면 참 값 반환
identify(component, x, y) 표의 x, y 위치에 지정된 component의 세부 사항 반환
identify_row(y) 표의 y 위치의 iid 값을 반환
identify_column(x) 표의 x 위치의 열 식별자 반환
identify_element(x, y) 표의 x, y 위치에 요소를 반환
identify_region(x, y) 표의 x, y 위치에 세부 사항 반환
next(iid) iid 값을 가지는 항목의 다음 순서 iid 값 반환
parent(iid) iid 값을 가지는 항목의 상위 항목 반환
prev(iid) iid 값을 가지는 항목의 이전 순서 iid 값 반환
see(iid) iid 값을 가지는 항목이 보이도록 스크롤 및 상위 항목 펼침
selection() 현재 선택된 항목의 iid 값을 튜플로 반환
selection_set(iid) iid 값을 가지는 항목 선택
selection_add(iid) iid 값을 가지는 항목 다중 선택
selection_remove(iid) iid 값을 가지는 항목 선택 취소
selection_toggle(iid) iid 값을 가지는 항목 반전 선택
set(iid) iid 값을 가지는 항목의 사전 값 반환
set(iid, column=col) iid 값을 가지는 항목에서 col의 값 반환
set(iid, column=col, value=val) iid 값을 가지는 항목에서 col의 값을 val로 변경
  • component : element, region, item, column, row

  • identify_region(x, y)의 반환값
    • heading : 열 제목 영역
    • separator : 열 제목 사이의 간격 선
    • tree : 트리 열(#0) 영역
    • cell : 셀 영역
    • nothing : 빈 영역
  • Tip : item(iid)은 항목의 text, values, tags 등을 사전(dict)으로 반환하며, item(iid, values=[...])처럼 사용하면 값을 변경할 수 있습니다.


표 태그 메서드

이름 의미 속성
tag_bind(태그 이름, sequence=”이벤트”, callback=함수) 태그 이름의 목록에서 이벤트가 실행되었을 때 함수를 실행 -
tag_configure(태그 이름, tag_option) 태그 이름에 형태 설정 -
tag_has(태그 이름) 태그 이름에 할당된 iid 값 반환 -
tag_has(태그 이름, item=iid) 태그 이름과 iid 값 비교 Boolean
  • Tip : tag_bind()의 sequence에는 <Button-1>, <Double-Button-1>, <Return> 등 마우스와 키보드 이벤트만 사용할 수 있습니다.


표 가상 이벤트

def selected(event):
    for iid in treeview.selection():
        print(treeview.item(iid))

treeview.bind("<<TreeviewSelect>>", selected)
이름 의미
<<TreeviewSelect» 표의 항목이 선택될 때
<<TreeviewOpen» 표의 항목을 열 때
<<TreeviewClose» 표의 항목을 닫을 때

표.bind("<<가상 이벤트>>", 함수)를 사용하여 가상 이벤트가 발생할 때 실행할 함수를 설정할 수 있습니다.

표.selection()으로 선택된 항목의 iid를 확인하고, 표.item(iid)로 해당 항목의 값을 가져올 수 있습니다.


표 태그 메서드 tag_option

이름 의미 기본값 속성
background 태그가 설정된 항목의 배경 색상 - color
foreground 태그가 설정된 항목의 문자열 색상 - color
image 표에 포함할 임의 이미지 - -
font 표 안의 문자열 글꼴 설정 TkDefaultFont font



Treeview Parameter

표 형태 설정

이름 의미 기본값 속성
height 표에 표시할 행의 개수 10 상수
padding 표의 여백 0 상수


표 형식 설정

이름 의미 기본값 속성
cursor 표의 마우스 커서 모양 - 커서 속성
class_ 클래스 설정 - -
columns 표의 열 이름 설정 - 리스트
displaycolumns 표의 열 순서 설정 - 리스트
selectmode 표의 선택 형식 설정 extended extended, browse, none
show 표의 제목 표시 여부 tree headings tree headings, tree, headings
xscrollcommand 표의 가로스크롤 위젯 적용 - Scrollbar위젯.set
yscrollcommand 표의 세로스크롤 위젯 적용 - Scrollbar위젯.set


표 동작 설정

이름 의미 기본값 속성
takefocus Tab 키를 이용하여 위젯 이동 허용 여부 False Boolean


참고

  • cursor 매개변수

    • arrow, based_arrow_down, based_arrow_up, boat, bogosity, bottom_left_corner, bottom_right_corner, bottom_side, bottom_tee, box_spiral, center_ptr, circle, clock, coffee_mug, cross, cross_reverse, crosshair, diamond_cross, dot, dotbox, double_arrow, draft_large, draft_small, draped_box, exchange, fleur, gobbler, gumby, hand1, hand2, heart, icon, iron_cross, left_ptr, left_side, left_tee, leftbutton, ll_angle, lr_angle, man, middlebutton, mouse, pencil, pirate, plus, question_arrow, right_ptr, right_side, right_tee, rightbutton, rtl_logo, sailboat, sb_down_arrow, sb_h_double_arrow, sb_left_arrow, sb_right_arrow, sb_up_arrow, sb_v_double_arrow, shuttle, sizing, spider, spraycan, star, target, tcross, top_left_arrow, top_left_corner, top_right_corner, top_side, top_tee, trek, ul_angle, umbrella, ur_angle, watch, wait, xterm, X_cursor

  • selectmode 매개변수

    • extended : Ctrl 키 또는 Shift 키를 활용하여 목록을 다중 선택 가능
    • browse : 한 번에 하나의 목록만 선택 가능
    • none : 목록 선택 불가
  • show 매개변수

    • tree headings : 트리 열(#0)과 열 제목 모두 표시
    • tree : 열 제목을 표시하지 않음
    • headings : 트리 열(#0)을 표시하지 않음 (일반적인 표 형태)

댓글 남기기