Python tkinter 강좌 : 제 30강 - Treeview
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)을 표시하지 않음 (일반적인 표 형태)
댓글 남기기