Python tkinter 강좌 : 제 20강 - PanedWindow
PanedWindow(내부 윈도우)

PanedWindow를 이용하여 다른 위젯들을 포함하고 구역을 나눌 수 있는 내부 윈도우를 생성할 수 있습니다.
PanedWindow 사용
import tkinter
window=tkinter.Tk()
window.title("YUN DAE HEE")
window.geometry("640x400+100+100")
window.resizable(True, True)
panedwindow1=tkinter.PanedWindow(relief="raised", bd=2)
panedwindow1.pack(expand=True)
left=tkinter.Label(panedwindow1, text="내부윈도우-1 (좌측)")
panedwindow1.add(left)
panedwindow2=tkinter.PanedWindow(panedwindow1, orient="vertical", relief="groove", bd=3)
panedwindow1.add(panedwindow2)
right=tkinter.Label(panedwindow1, text="내부윈도우-2 (우측)")
panedwindow1.add(right)
top=tkinter.Label(panedwindow2, text="내부윈도우-3 (상단)")
panedwindow2.add(top)
bottom=tkinter.Label(panedwindow2, text="내부윈도우-4 (하단)")
panedwindow2.add(bottom)
window.mainloop()panedwindow1=tkinter.PanedWindow(relief="raised", bd=2)
panedwindow1.pack(expand=True)
left=tkinter.Label(panedwindow1, text="내부윈도우-1 (좌측)")
panedwindow1.add(left)
panedwindow2=tkinter.PanedWindow(panedwindow1, orient="vertical", relief="groove", bd=3)
panedwindow1.add(panedwindow2)
right=tkinter.Label(panedwindow1, text="내부윈도우-2 (우측)")
panedwindow1.add(right)
top=tkinter.Label(panedwindow2, text="내부윈도우-3 (상단)")
panedwindow2.add(top)
bottom=tkinter.Label(panedwindow2, text="내부윈도우-4 (하단)")
panedwindow2.add(bottom)tkinter.PanedWindow(윈도우 창, 매개변수1, 매개변수2, 매개변수3, ...)을 사용하여 해당 윈도우 창에 표시할 내부 윈도우의 속성을 설정할 수 있습니다.
매개변수를 사용하여 내부 윈도우의 속성을 설정합니다.
내부 윈도우의 새시를 이동하여 컨테이너를 움직일 수 있습니다.
새시(sash)는 구역과 구역 사이의 경계선이며, 마우스로 드래그하여 각 구역의 크기를 조절할 수 있습니다.
예제의 panedwindow1은 orient를 설정하지 않았으므로 기본값인 horizontal이 적용되어 위젯이 좌우로 나뉘며, panedwindow2는 orient="vertical"이므로 위젯이 상하로 나뉩니다.
-
Tip : 예제의
tkinter.PanedWindow(relief="raised", bd=2)처럼 첫 번째 매개변수인윈도우 창을 생략하면 기본 윈도우 창(Tk)에 생성됩니다. -
Tip : 내부 윈도우에 포함할 위젯은
pack,grid,place로 배치하지 않고, 반드시add메서드로 추가해야 합니다. -
Tip :
tkinter.ttk.PanedWindow도 동일한 용도로 사용할 수 있으며,add(위젯, weight=1)과 같이weight로 창 크기가 변경될 때 각 구역이 늘어나는 비율을 설정합니다.
PanedWindow Method
| 이름 | 의미 | 설명 |
|---|---|---|
| add(위젯, option) | 위젯 추가 | 해당 위젯을 내부 윈도우에 추가 |
| remove(위젯) / forget(위젯) | 위젯 제거 | 해당 위젯을 내부 윈도우에서 제거 |
| paneconfig(위젯, option) | 위젯 설정 변경 | 추가된 위젯의 option을 변경 |
| panes() | 위젯 목록 반환 | 내부 윈도우에 추가된 위젯의 목록을 반환 |
| sash_coord(index) | 새시 좌표 반환 | index 번째 새시의 (x, y) 좌표를 반환 |
| sash_place(index, x, y) | 새시 위치 변경 | index 번째 새시를 (x, y) 위치로 이동 |
-
option
- after : 해당 위젯의 뒤에 배치,
panedwindow2.add(top, after=bottom)은bottom뒤에top을 배치 - before : 해당 위젯의 앞에 배치,
panedwindow2.add(bottom, before=top)은top앞에bottom을 배치 - width : 내부 윈도우 자식의 너비
- height : 내부 윈도우 자식의 높이
- minsize : 해당 위젯 구역의 최소 크기, 새시를 이 크기보다 작게 이동할 수 없음
- sticky : 할당된 공간 내에서의 위치 조정,
n, e, w, s의 조합(기본값 = nesw) - stretch : 창 크기가 변경될 때 늘어나는 구역 설정,
always, first, last, middle, never(기본값 = last) - hide : True일 경우, 해당 위젯을 내부 윈도우에서 숨김
- padx : 내부 윈도우의 가로 여백
- pady : 내부 윈도우의 세로 여백
- after : 해당 위젯의 뒤에 배치,
-
Tip : 위젯이 추가된 순서에 따라
내부 윈도우에서 위젯의 배열 순서를 결정
PanedWindow Parameter
내부 윈도우 형태 설정
| 이름 | 의미 | 기본값 | 속성 |
|---|---|---|---|
| width | 내부 윈도우의 너비 | 0 | 상수 |
| height | 내부 윈도우의 높이 | 0 | 상수 |
| relief | 내부 윈도우의 테두리 모양 | flat | flat, groove, raised, ridge, solid, sunken |
| borderwidth=bd | 내부 윈도우의 테두리 두께 | 1 | 상수 |
| background=bg | 내부 윈도우의 배경 색상 | SystemButtonFace | color |
| orient | 내부 윈도우의 표시 방향 | horizontal | vertical, horizontal |
| sashwidth | 내부 윈도우 새시의 너비 | 3 | 상수 |
| sashrelief | 내부 윈도우 새시의 테두리 모양 | flat | flat, groove, raised, ridge, solid, sunken |
| sashpad | 내부 윈도우 새시의 여백 | 0 | 상수 |
| showhandle | 내부 윈도우 새시의 손잡이 표시 유/무 | False | Boolean |
| handlesize | 내부 윈도우 새시의 손잡이 크기 | 8 | 상수 |
| handlepad | 내부 윈도우 새시의 손잡이 위치 | 8 | 상수 |
| opaqueresize | 새시를 드래그하는 동안 구역 크기를 즉시 변경할지 여부 | True | Boolean |
내부 윈도우 형식 설정
| 이름 | 의미 | 기본값 | 속성 |
|---|---|---|---|
| cursor | 내부 윈도우의 마우스 커서 모양 | - | 커서 속성 |
| sashcursor | 내부 윈도우 새시의 마우스 커서 모양 | - | 커서 속성 |
참고
- 미 입력시,
width와height를자동 조절
-
opaqueresize가False일 경우, 드래그하는 동안에는 새시의 위치만 표시되고 마우스를 뗄 때 구역의 크기가 변경됨 -
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
댓글 남기기