파이썬/파이썬(python) 중급

[27-1 파이썬] GUI, Tkinter

Olivia-BlackCherry 2022. 9. 13. 16:48

Graphical User Interface

그래픽 사용자 인터페이스

GUI 구이, 지유아이

 

1990년대에는 컴퓨터와 대화하기 위해 명령어를 문자로 입력해야 했다.

지금의 리눅스 운영체제를 떠올리거나, 콘솔창, 프롬프트 창을 생각하면 된다. 

 

그런데 구이가 등장하면서부터 사용자와 컴퓨터의 대화가 편해졌다. 

원하는 곳에 마우스로 가져다 대고, 클릭만 하면 되기 때문이다.

 

우리가 쓰는 마이크로프트사의 윈도우 운영체제 역시 GUI 기반이다.

그런데 GUI의 역사를 들여다보면, 

마이크로소프트사보다 애플이 먼저 GUI를 만들었고, 

그보다 먼저, 제록스 파크(지적 재산권 검색 센터)에서 가장 먼저 GUI를 만들었다고 한다.

 

이와 관련된 영화가 있다. 

GUI 역사에 대해 더 알고싶다면 보기를 추천한다!

Pirates of Silicon Valley(1999)

 

 

이번 시간부터는 GUI를 구현할 수 있는 프로그램인 Tkinter을 이용해서

나만의 GUI 를 만들어보도록 하겠다.

 

지금부터는 터틀 모듈을 넘어

좀더 큰 프로그램을 만들어보자!

 

 

Tkinter

파이썬 내장 모듈이기에 바로 import해서 가져와 쓰면 된다. 

 

가져올 클래스가 많다면 *을 사용하여 tkinter 안의 모든 클래스를 가져오면 편하지만,

from tkinter import *

사용할 클래스가 한 두개라면 해당 클래스만 콕 찝어 가져오거나, 간단히 import tkinter만 해도 된다.

from tkinter import TK

 

이벤트 구동형 Event Driven 

GUI는 사용자가 무엇을 하는지 계속 화면에서 지켜보고 있는 것이다.

계속 리프레싱하면서 어떤 이벤트가 일어나는지 예의주시한다. 

그리고 무엇인가 일어나는 순간 바로 반응하는 것이다. 

이런 유형의 GUI 프로그램을 Event Driven 이벤트 구동형이라고 한다.

 

따라서

TK클래스에서 window라는객체를 생성하고,

mainloop()를 이용해서 화면이 닫히지 않도록 설정한다.

import tkinter
window = tkinter.Tk()

window.mainloop()

 

 

title()

title 메소드를 이용해서 

프로그램 맨 위에 제목을 단다.

window.title("Let's make GUI!")

 

 

minsize(width=?, height=?)

메소드를 이용해서 윈도우 크기를 조정한다. 

minsize() 그대로 사용하면 최소 규격의 크기가 만들어지고, 

width, height를 명시하면 해당 크기로 조정이 가능하다.

window.minsize(width=300, height=300)

 

 

레이블 label

윈도우 안에 들어갈 몇몇 컴포넌트 중, 

레이블을 먼저 만들어보자. 

tkinter에서 Label 클래스를 가져와 my_label 객체를 만든다.

화면에 보이고자 하는 문구를 text에 입력하고, 폰트를 튜플로 지정한다. 

폰트는 글씨체, 크기, 글자효과를 줄 수 있다.

my_label = tkinter.Label(text="Olivia", font =("Arial", 24, "bold"))

 

 

pack()

라벨이 화면에 보이게 하려면 pack() 메소드를 사용한다. 

기본적으로 중앙에 위치하도록 만든다. 

my_label.pack()

패커는 배치 관리 시스템이다. 내가 만든 컴포넌트를 배치하는 방법으로 expand, fill, side 등 많은 옵션이 있다.

The packer 
The packer is one of Tk’s geometry-management mechanisms. Geometry managers are used to specify the relative positioning of widgets within their container - their mutual master. In contrast to the more cumbersome placer (which is used less commonly, and we do not cover here), the packer takes qualitative relationship specification - above, to the left of, filling, etc - and works everything out to determine the exact placement coordinates for you.

expand는 전체 공간을 차지하도록 확장할지, 최소한으로 배치할지를 결정한다.

side는 좌, 우, 아래, 위 등 배치되는 위치를 결정한다.

 

 

my_label.pack(side = 'left')

 

그외 pack과 관련된 설명은 아래의 파이썬 공식문서를 참고하면된다.

https://docs.python.org/3/library/tkinter.html#the-packer

 

tkinter — Python interface to Tcl/Tk — Python 3.10.7 documentation

tkinter — Python interface to Tcl/Tk Source code: Lib/tkinter/__init__.py The tkinter package (“Tk interface”) is the standard Python interface to the Tcl/Tk GUI toolkit. Both Tk and tkinter are available on most Unix platforms, including macOS, as w

docs.python.org

http://tcl.tk/man/tcl8.6/TkCmd/pack.htm#M8

 

pack manual page - Tk Built-In Commands

The arguments consist of the names of one or more content windows followed by pairs of arguments that specify how to manage the content. See THE PACKER ALGORITHM below for details on how the options are used by the packer. The following options are support

tcl.tk