강의노트 위젯 배치 - place

강의노트 • 조회수 39 • 댓글 0 • 작성 1주 전 • 수정 1주 전  
  • 위젯 배치
  • place

place

tkinter의 place( )메서드는 위젯을 절대/상대 좌표 기반 정확한 위치에 배치하는 관리자이다.

place()는 픽셀의 절대위치 혹은 위젯의 상대 위치를 기준으로 정확한 위치의 지정이 가능하다.

기본 형태

widget.place(**options)

주요 옵션들은:

옵션 설명
x 부모 위젯 기준 왼쪽에서의 가로 픽셀 위치
y 부모 위젯 기준 위쪽에서의 세로 픽셀 위치
relx 부모 위젯 너비에 대한 상대 가로 위치 (0.0~1.0)
rely 부모 위젯 너비에 대한 상대 세로 위치 (0.0~1.0)
width 위젯의 고정된 픽셀 너비
height 위젯의 고정된 픽셀 높이
relwidth 부모 위젯 너비에 대한 상대 너비 (0.0~1.0)
relheight 부모 위젯 높이에 대한 상대 너비 (0.0~1.0)
anchor 기준점 지정 (center, n,s,e,w )

절대 좌표는 아래 그림과 같이 왼쪽 상단이 원점(0,0)이고 x축은 오른쪽으로 증가하고 y축은 위에서 아래로 증가한다. 창의 왼쪽 하단 점은 (300,200)이다.

버튼을 (100,50)에 표시하는 프로그램은

# 프로그램 01
import tkinter as tk

root = tk.Tk()
root.geometry("300x200")

btn = tk.Button(root, text="클릭")
btn.place(x=100, y=50)  # x=100px, y=50px 위치에 버튼 배치

root.mainloop()

실행결과

좌측 상단이 (0,0)이고 여기서 세로 100픽셀, 가로로 50픽셀의 위치에 버튼이 위치하는 프로그램이다. 버튼의 크기는 사용자가 지정한 것이 없어서 사용자가 입력한 텍스트 "클릭"이 표시되는 크기로 설정된다. 결과는 아래와 같다. (화살표와 숫자는 설명을 위해 추가한 것이다.)

상대 위치는 부모 위젯의 크기가 (1,1)로 보고 이에 해당하는 크기를 정하면 된다. 위의 프로그램을 상대 위치로 지정하면 다음과 같다.

# 프로그램 02
import tkinter as tk

root = tk.Tk()
root.geometry("300x200")

btn = tk.Button(root, text="클릭")
btn.place(relx=100/300, rely=50/200)  # x=100px, y=50px 위치에 버튼 배치

root.mainloop()

위젯의 크기는 자동적으로 최소 크기로 결정되지만 사용자가 width와 height으로 지정할 수 있다.

위의 프로그램에서 세로 100픽셀, 가로 50픽셀의 버튼을 만들면 다음과 같다.

# 프로그램 03
import tkinter as tk

root = tk.Tk()
root.geometry("300x200")

btn1 = tk.Button(root, text="클릭1")
btn1.place(x=100, y=50,width=100,height=50)  

root.mainloop()

왼쪽 그림은 width와 height을 입력하지 않아서 기본 크기의 버튼이고 오른쪽 그림은 width =100, height=50을 입력한 경우이다.

width와 height이 생략되면 원 위젯의 크기로 나타난다.

relwidth와 relheight은 부모 위젯의 크기를 (1,1)로 보고 상대적인 크기를 정하는 방법이다. 프로그램 02를 상대 크기와 높이로 변경하면 프로그램 04가 된다.

# 프로그램 04
import tkinter as tk

root = tk.Tk()
root.geometry("300x200")

btn1 = tk.Button(root, text="클릭1")
btn1.place(x=100, y=50, relwidth=100/300, relheight=50/200)  

root.mainloop()

anchor는 위젯을 배치하는 기준을 나타낸다. anchor의 옵션은 "n, ne, e, se, s, sw, w, nw, center"가 가능하다. anchor="ne"이라고 하면 위쪽과 왼쪽을 기준으로 잡는다.

다음 그림과 같이 x=x, y =y, width=w, height=h와 같다. 이때 anchor에 따른 A점의 위치를 알아본다.

anchor가 주어지지 않은 것과 anchor="nw"는 A점의 위치는 (x,y)가 된다.

anchor="n"으로 주어지면 A점의 위치는 (x-w/2,y)가 된다. 위의 경계는 주어져서 y가 되지만 x의 경계는 없다 이경우 위젯의 중심점이 x의 위치가 된다.

anchor="w"로 주어지면 A점의 위치는 (x,y-h/2)가 된다.

anchor="s"로 주어지면 A점의 위치는 (x-w/2,y-h)가 된다.

anchor="sw"로 주어지면 A점의 위치는 (x,y-h)가 된다.

anchor="center"로 주어지면 A점의 위치는 (x-w/2, y-h/2)가 된다.

이전 글
다음 글
댓글
댓글로 소통하세요.