본문 바로가기
프로그래밍/파이썬

[파이썬 GUI] tkinter 사용법 1(화면 만들기, 화면 중앙에 배치하기)

by 인성패밀리 2022. 10. 13.
반응형

파이썬으로 GUI 즉, 프로그램 화면을 만드는 방법을 알아보겠습니다. PyQt도 있지만 tkinter가 개인적으로 더 쉽게 느껴졌습니다. 기초적인 과정부터 tkinter와 소켓 통신을 통해 채팅창 만드는 과정까지 나가보겠습니다.

 

우선 tkinter 모듈을 import 해야합니다. tkinter 모듈은 파이썬 설치 시 기본으로 제공됩니다. 혹시나 없다면 pip install tk로 설치해야 합니다.

 

목차

1. 화면 만들기

2. 창의 최대/최소 사이즈

3. 줄이기 가능, 불가능

4. 프로그램 화면을 중앙에 배치하기

 

1. 화면 만들기

코드를 통해서 알아보겠습니다.

from tkinter import *

gui = Tk()

gui.mainloop()

from tkinter import *

-> tkinter 모듈을 임포트 시켜서 사용이 가능하게 해주는 것입니다.

 

gui = Tk()

-> Tk 객체를 생성하는 것입니다. 즉 프로그램 화면을 만드는 것입니다.

 

gui.mainloop()

-> 이게 없이 코드를 실행하면 딱 한 번 실행하고 끝나게 됩니다. 이 코드로 인해 프로그램 창이 우측 상단 x를 누르지 않는 이상 화면을 유지시켜 줍니다.

 

2. 창의 최대/최소 사이즈

from tkinter import *

gui = Tk()

gui.geometry("400x300+300+300")
gui.minsize(200, 150)
gui.maxsize(600, 450)

gui.mainloop()

gui.geometry("400x300+300+300")

-> 가로 400, 세로 300, 화면의 좌측 상단으로부터 300이 떨어진 곳, 화면의 좌측으로부터 300이 떨어진 곳(쉽게 말해서 기본 크기가 400 x 300이고 왼쪽으로부터 가로 300 세로 300이 떨어진 곳에서 화면을 만들어라는 것입니다.)이때 +300+300은 빼고 "400x300"으로 해도 가능합니다. 추가로 -300-300이런 것도 가능합니다. 따라서 +는 좌상단으로부터 떨어진 거리,  -는 우하단으로부터 떨어진 거리입니다.

 

gui.minsize(200, 150)

-> 창을 줄일 때 창의 최소 사이즈 입니다. 가로 200, 세로 150으로 제한합니다.

 

gui.maxsize(600, 450)

-> 창을 늘릴 때 창의 최대 사이즈 입니다. 가로 600, 세로 450으로 제한합니다.

 

이 코드를 응용하면 창을 늘리거나 줄일 수 없도록 만들 수도 있습니다.

from tkinter import *

gui = Tk()

gui.minsize(400, 300)
gui.maxsize(400, 300)

gui.mainloop()

이런 식으로도 가능하고

 

프로그램 화면이 등장하는 위치를 조절하고 싶으면 아래와 같이 geometry 메소드를 사용하면 됩니다.

from tkinter import *

gui = Tk()

gui.geometry("+300+300")
gui.minsize(400, 300)
gui.maxsize(400, 300)

gui.mainloop()

 

3. 줄이기 가능, 불가능

minsize, maxsize를 사용한다면 창을 줄이거나 늘리거나 제한을 둘 수 있지만 아래와 같은 방법도 있습니다.

from tkinter import *

gui = Tk()

gui.geometry("400x300")
gui.resizable(True, False)

gui.mainloop()

gui.resizable(True, False)

-> 이 코드는 가로를 늘릴 수 있는지, 세로를 늘릴 수 있는지 bool 값을 통해서 제한을 둘 수 있습니다.

 

4. 프로그램 화면을 중앙에 위치하기

모니터의 크기를 자동으로 구하고 이에 맞추어 값을 적절히 하면 가운데로 배치할 수 있습니다.

이때 모니터의 크기는 자신의 모니터 해상도를 말합니다.

from tkinter import *

gui = Tk()
width = gui.winfo_screenwidth()  # 모니터 해상도 가로 크기
height = gui.winfo_screenheight()  # 모니터 해상도 세로 크기
gui.geometry(f"400x300+{int((width-400)/2)}+{int((height-300)/2)}")
gui.resizable(False, False)

gui.mainloop()

gui.geometry(f"400x300+{int((width-400)/2)}+{int((height-300)/2)}")

-> f-string 방식을 이용하여 깔끔히 나타낼 수 있습니다. 공식은 (모니터 가로 해상도 - 프로그램의 가로크기)/2, (모니터 세로 해상도 - 프로그램의 세로크기)/2 입니다.

 

 

내용이 잘 전달되었으면 좋겠습니다. 다음에는 글자를 나타낼 수 있는 Label에 대해서 알아보겠습니다.

반응형

댓글