티스토리 뷰
9.6 기하 관리자(The Geometry Managers)
- Tkinter는 기하 관리자를 이용하여 컨테이너(container)안의 위젯 위치를 정해준다.
- Tkinter는 세 가지 기하 관리자를 제공한다.
ex) gird manager, pack manager, place manager
- 우리는 이미 그리드 매니저와 팩 매니저는 사용해보았다.
- 이번 챕터에서 추가적인 내용을 배운다.
9.6.1 그리드 매니저(The Grid Manager)
- 그리드 매니저(Grid Manager)는 보이지 않는 격자(grid) 쎌에 위젯을 배치하는 역할을 한다.
- 지정한 행(row)과 열(column)에 위젯을 배치한다.
- rowspan과 columnspan 매개 변수를 이용하여 여러 개의 행과 열까지 차지해 확장 배치도 가능하다.
*그리드 매니저 예제(GridManagerDemo.py)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 |
from tkinter import *#tkinter 내 모든 정의 임포트
class GridMangerDemo:
window = Tk() # 창 생성
window.title("Grid Manager Demo")#타이틀 셋
message = Message(window, text = "This Message widget occupies three rows and two columns")
message.grid(row = 1, column = 1, rowspan = 3, columnspan = 2)
Label(window, text = "First Name : ").grid(row = 1, column = 3)
Entry(window). grid(row = 1, column = 4, padx = 5, pady = 5)
Label(window, text = "Last Name: ").grid(row = 2, column = 3)
Entry(window).grid(row = 2, column = 4)
Button(window, text = "Get Nmae").grid(row = 3, padx = 5, pady = 5, column = 4, sticky = E)
window.mainloop() #이벤트 루프 생성
GridManagerDemo() |
cs |
<실행 결과>
- Line 09, 메세지(Message) 위젯은 1행 1열에 위치, 3개의 행과 2개의 열까지 확장된 상태로 배치되어있다.
- Get Name 버튼은 sticky = E 옵션(line 14)을 사용했다.
- 이 sticky 옵션은 버튼을 셀(cell)의 동쪽(East)에 붙이기 위해 사용되었고 그래서 Entry 위젯과 같은 열에 오른쪽 정렬이 되어 있는 것이다.
- sticky 옵션은 셀이 위젯보다 클 때 어떻게 위젯을 확장(expand)할 지 정의해주는 역할을 한다.
- sticky 옵션은 상수 S, N, E, W 나 NW, NE, SW, SE의 상수와 함께 쓰인다.
- Line 11, 14, padx 와 pady 옵션은 셀에 수평, 수직으로 공백을 넣는 역할을 한다.
- 이 옵션을 이용해 위젯 내부의 경계에도 공백을 넣을 수 있다.
9.6.2 팩 매니저(The Pack Manager)
- 팩 매니저(Pack Manager)는 위젯을 서로 위에 배치하거나 옆으로 나란히 배치하는데 사용된다.
- fill 옵션을 이용해 위젯을 컨테이너(container) 전체에 채울 수 있다.
*팩 매니저 예제 1(PackManagerDemo.py)
1
2
3
4
5
6
7
8
9
10
11
12
13
14 |
from tkinter import *#tkinter 내 모든 정의 임포트
class PackManagerDemo:
def __init__(self):
window = Tk() #창 생성
window.title("Pack Manager Demo 1") # 타이틀 셋
Label(window, text = "Blue", bg = "blue").pack()
Label(window, text = "Red", bg = "red").pack(fill = BOTH, expand = 1)
Label(window, text = "Green", bg = "green").pack(fill = BOTH)
window.mainloop()# 이벤트 루프 생성
PackManagerDemo() |
cs |
<실행 결과>
- 위 예제의 Red 라벨은 BOTH 값을 가진 fill 옵션과 1값을 가진 expand 옵션을 사용했다.
- fill 옵션은 상수 X(수평), Y(수직) 와 BOTH(둘 다)를 이용해 사용한다.
- expand 옵션은 팩 매니저가 위젯박스에 추가 공간을 할당하게 만든다.
- 부모 위젯(parent widget)이 패킹된 위젯이 필요로 하는 크기보다 더 큰 경우, expand 옵션의 값이 0이 아닌 위젯이 그 자리를 메꾼다.
ex) 현재 프로그램에서 부모위젯은 윈도우 창, 패킹된 위젯은 뒤에 pack() 메소드를 이용한 위젯을 의미한다.
- 아래는 옆으로 나란히 배치시킨 팩 매니저 예제이다.
* 팩매니저 예제 2(PackManagerWithSide.py)
1
2
3
4
5
6
7
8
9
10
11
12
13
14 |
from tkinter import *#tkinter 내 모든 정의 임포트
class PackManagerDemo:
def __init__(self):
window = Tk() #창 생성
window.title("Pack Manager Demo 1") # 타이틀 셋
Label(window, text = "Blue", bg = "blue").pack(side = LEFT)
Label(window, text = "Red", bg = "red").pack(side = LEFT, fill = BOTH, expand = 1)
Label(window, text = "Green", bg = "green").pack(side = LEFT, fill = BOTH)
window.mainloop()# 이벤트 루프 생성
PackManagerDemo() |
cs |
<실행 결과>
9.6.3 장소 매니저(The Place Manager)
- 장소 매니저(Place Manager)는 절대적인 위치에 위젯을 배치시킨다.
- 아래가 예제이다.
*장소 매니저 예제(PlaceManagerDemo.py)
1
2
3
4
5
6
7
8
9
10
11
12
13
14 |
from tkinter import *#tkinter 내 모든 정의 임포트
class PlaceManagerDemo:
def __init__(self):
window = Tk() #창 생성
window.title("Place Manager Demo") # 타이틀 셋
Label(window, text = "Blue", bg = "blue").place(x = 20, y = 20)
Label(window, text = "Red", bg = "red").place(x = 50, y = 50)
Label(window, text = "Green", bg = "green").place(x = 80, y = 80)
window.mainloop()# 이벤트 루프 생성
PlaceManagerDemo() |
cs |
<실행 결과>
- 왼쪽 상단의 Blue 라벨은 (20, 20) 위치에 배치되어 있다. 그 외 라벨들 역시 이런 방식으로 배치되어 있다.
참고 문헌 : Introduction to Programming Using Python / Y.DANIEL LIANG
※
본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.
교재 영어 원서를 직접 번역하여 정리한 게시물이므로 일부 오타, 의역이 존재할 수 있습니다. 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다.
※
'파이썬 > 파이썬 GUI' 카테고리의 다른 글
[파이썬]대출 계산기 (0) | 2017.11.06 |
---|---|
[파이썬]캔버스 (0) | 2017.10.30 |
[파이썬]위젯 클래스 (4) | 2017.09.26 |
[파이썬 GUI]이벤트 처리하기(Processing Events) (1) | 2017.09.14 |
[파이썬]Tkinter를 이용한 GUI 프로그래밍 (1) | 2017.09.10 |
- Total
- Today
- Yesterday
- 파이썬 진수 변환
- 파이썬 문자열
- 파이썬 if문
- css 그리드
- 파이썬
- 자료구조
- 파이썬 단계적 개선
- 파이썬 리스트
- 웹
- 파이썬 함수
- 파이썬 예제
- 자바 에센셜 실습문제
- 자바
- 파이썬 객체
- 파이썬 while
- 파이썬 for
- css
- 백준 10451
- 백준 11501
- 파이썬 터틀
- css 박스
- 자바스크립트 자료구조
- 버츄어박스
- 파이썬 클래스
- 명품 c++ 실습
- 파이썬 선택문
- 백준
- 자바스크립트 그래프
- 백준 1874
- 파이썬 연산자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |