파이썬(Python)

[ Tkinter ] tkinter 윈도우 화면 중앙에 위치 시키기

카루루1007 2023. 1. 16. 22:19
728x90
반응형
SMALL

tkinter로 윈도우 창을 만들고 별다른 설정이 없다면,

아래 그림과 같이

내 모니터 화면의 좌측 상단에 창이 만들어 집니다.

아래 그림은 vscode를 전체화면으로 하고 

코드를 실행한 결과입니다.

 

기본적으로 좌측 상단에 위치하게 되는

윈도우를 중앙에 위치시키는 방법을 알아보겠습니다.

 

 창의 너비, 높이, 위치 설정

창의 너비, 높이, 위치 설정은

geometry()를 사용합니다.

아래와 같이 코드를 작성하고 실행하면

너비 300, 높이 500 pixel 의 창을 만들어 줍니다.

from tkinter import *

tk = Tk()
tk.geometry("300x500")
tk.mainloop()

 

위치를 조정하고 싶다면 아래와 같이

[ + ] [ - ]연산자를 사용하여 위치를 조정해 줄 수 있습니다.

from tkinter import *

tk = Tk()
tk.geometry("300x500+200+100")
tk.mainloop()

[ + ] 연산자는 기준을 내 화면의 오른쪽 끝과 위쪽 끝을 기준으로 하고

[ - ] 연산자는 기준을 내 화면의 왼쪽 끝과 아래을 기준으로 합니다. 

 

코드를 아래와 같이 변경하면

창의 위치는 그림과 같이 바뀝니다. 

from tkinter import *

tk = Tk()
tk.geometry("300x500+200-100")
tk.mainloop()

 

반응형

여기서 창의 위치에 대한 기준점은

창의 중앙이 아니라 가장자리가 됩니다

위 그림에서 빨간색 원 부분이 기준점이 되는 것으로 보이며

가운데 파란색 부분은 기준점이 아닙니다.

 

화면의 가운데로 창을 위치시키기 위한 로직 

 

검은색네모가 제 화면입니다.

파란색 선은 설명을 위해 화면의 중앙을 표시하기 위한 기준선입니다.

빨간색 네모는 tkinter로 만든 윈도우입니다.

 

먼저 내 화면의 [ 가로와 세로의 크기 ]를 알아낸 후

[ 절반으로 나누면 ] 화면의 중앙을 알 수 있습니다.

만약

tk.geometry("300x500+화면의 가로 크기/2 + 화면의 세로크기/2") 

를 하게 되면 아래 그림과 같이 창이 생성될 것이므로

조금 더 조정을 해야 합니다.

 

(화면의 가로크기 / 2) - (창의 가로크기 / 2)

(화면의 세로크기 / 2) - (창의 세로크기 / 2)

만큼 이동시키면 화면의 중앙으로 올 것 같습니다.

 

화면의 크기 알아내기

화면의 크기를 알아내려면 

winfo_screenwidth()

winfo_screenheight()
를 사용하면 됩니다.
 
winfo_screenwidth() : 화면의 가로 크기
winfo_screenheight() : 화면의 세로 크기

 

아래 코드를 실행하면 화면의 크기를 알 수 있습니다.

from tkinter import *
tk = Tk()
windows_width = tk.winfo_screenwidth()
windows_height = tk.winfo_screenheight()
print(windows_width, windows_height)
tk.mainloop()

제 화면의 크기는 [ 가로 2,560 세로 1,440 ]입니다.

이 가로 세로의 절반이 화면의 중앙입니다.

 

전체 소스 코드
from tkinter import *
tk = Tk()

#화면의 가로와 세로의 크기를 알아냄
windows_width = tk.winfo_screenwidth()
windows_height = tk.winfo_screenheight()

#생성할 윈도우의 가로와 세로 크기
app_width = 300
app_height = 500

#윈도우를 화면의 중앙에 위치시키기 위한 코드
center_width = (windows_width / 2) - (app_width / 2)
center_height = (windows_height / 2) - (app_height / 2)
tk.geometry(f"{app_width}x{app_height}+{int(center_width)}+{int(center_height)}")

tk.mainloop()

 

위 코드를 실행하면 아래 그림과 같이

화면 중앙에 윈도우가 나타나게 됩니다.

정확한지 재보진 못하겠지만

얼추 중앙에 위치하게 된 것 같습니다...

 

코드의 마지막에서 두번째 줄에

int()를 사용해 정수 형으로 변환시켜 주었습니다.

 

a = 500 / 2

print(a)

로 테스트 해보시면

파이썬은 [ / ]를 했을 때 실수형으로 결과값을 주는 것으로 보입니다.

geometry() 내부에는 정수형만 사용이 가능하기에

정수로 형태를 변환시켜 주었습니다.

728x90
반응형
LIST