본문 바로가기
컴퓨터 사이언스/TIL 정리

[파이썬] GUI프로그래밍 tkinter

by 메리뉴데이 2022. 5. 30.

tkinter 라이브러리 불러오기

from tkinter import *를 실행하면 Tk명령을 쓸 수 있다.

이렇게 표현해 입력해주면, 함수 앞에 tkinter. 이라고 작성할 필요가 없다.

파이썬에는 기본적으로 Tk라는 함수가 없다.

그냥 import tkinter라고만 처음에 입력한다고 하면,

Tk()만 쓰면 오류가 나고

tkinter 안에 있는 함수라는걸 알려줘야 하므로 tkinter.Tk()라고 써야한다.

win = Tk() 와 같이 창을 변수에 할당하여 입력을 해서 창을 생성하는 것은, 이 변수를 통하여 이 창에 명령을 내릴 수 있기 때문이다.

만들어진 창을 눈에 보이게 실행하기 위해서는 변수 뒤에 mainloop 함수를 걸어줘야 한다.

창의 크기라든지, 창의 title을 정하는 것은 창을 생성하는 부분과 실행하는 부분 사이에 옵션으로 집어 넣으면 된다.

 

다음부터 <>의 내용은 설명부분.

 

.geometry(사이즈<문자열형식으로" "안에>)

.title(이름<문자열형식으로" "안에>)

.option_add("*Font"<폰트를 바꿀거다 지정>,"폰트종류와 사이즈")

 

btn이라는 변수를 만들어 Button() 함수를 사용한다고 하면, 

btn = Button(win<이라는 창에>, text=<버튼 위에 내용은>"버튼"<버튼이라고 할거다>)

그리고나서 btn객체에 pack함수를 써주면,

btn.pack()

창 안에 버튼 위젯이 생성된다.

창의 내용들에 전체 폰트 걸어줬던 것들이 적용되어 보여질 것이다.

버튼은 기본으로 지정된 폰트의 크기에 맞춰 버튼의 크기가 정해질 것이기 때문에,

폰트의 크기가 버튼의 크기를 조정하는 역할을 하게 된다.

 

 

기본 위젯들

Label 텍스트를 표시하는 데 사용되는 위젯
Button 버튼을 제공하는 위젯
Entry 한 줄의 텍스트를 입력받는 위젯
Text 여러 줄로 된 텍스트를 입력받는 위젯
Frame 컨테이너 위젯

버튼과 레이블 위젯은 글자색과 배경색을 fg와 bg라는 매개 변수를 사용하여 설정 가능하고, width와 height로 버튼이나 레이블의 너비와 높이를 제어할 수 있다. 이때, 단위는 픽셀이 아니고 글자 단위<몇 개의 글자가 표시될 수 있나>를 나타내는 수치이다. 

ex) btn = Button(win<window변수>, text="클릭하세요", fg="blue", bg="yellow", width=80, height=2)

 

엔트리 위젯에서는 get()함수를 사용해 사용자의 입력을 가져오고, 사용자의 입력을 삭제하려면 delete()함수를 사용한다. 중간에 텍스트를 삽입하려면 insert()를 사용한다.

엔트리 위젯은 다음과 같이 생성한다.

ex) ent = Entry(win, fg="blue", bg="yellow", width=80)

 

 

배치 관리자

파이썬에서는 컨테이너 안에 존재하는 위젯의 크기와 위치를 자동으로 관리하는 객체인 배치 관리자가 있다.

파이썬은 3가지 종류의 배치 관리자를 제공한다.

1. 압축 배치 관리자(pack geometry manager)

     : 위젯들을 사각형 블록으로 간주하여 컨테이너 안에 상하로 배치한다. pack() 메소드를 사용한다.

        Button() 생성자는 버튼 객체를 반환하는데, 여기에 바로 .pack()을 붙여도 된다.

        ex) Button(win,  text="클릭하세요", fg="blue", bg="yellow", width=80, height=2).pack()

        연속으로 등장하는 버튼들을 왼쪽에서 오른쪽으로 배치하려면 side 매개 변수를 LEFT로 지정한다.

          이 외에도 RIGHT, TOP, BOTTOM로 지정도 가능하다.

         ex) Button(win,  text="클릭하세요1", fg="blue", bg="yellow", width=80, height=2).pack(side=LEFT)

                Button(win,  text="클릭하세요2", fg="blue", bg="yellow", width=80, height=2).pack(side=LEFT)

                Button(win,  text="클릭하세요3", fg="blue", bg="yellow", width=80, height=2).pack(side=LEFT)

 

2. 격자 배치 관리자(grid geometry manager)

     : 위젯들을 2차원의 격자에 배치한다. grid() 메소드를 사용한다.

        격자 배치 관리자를 사용하면 부모 윈도우는 테이블의 셀들로 분할되고, 각 위젯은 셀 단위로 특정한 위치에 배치된다.

        위젯의 크기를 고려하여 행과 열의 크기를 결정하기도 하며, 행과 열은 동일한 높이나 동일한 폭을 가질 필요는 없다.

        ex) btn1 = Button(win,  text="클릭하세요1", fg="blue", bg="yellow", width=80, height=2)

               btn2 = Button(win,  text="클릭하세요2", fg="blue", bg="yellow", width=80, height=2)

               btn3 = Button(win,  text="클릭하세요3", fg="blue", bg="yellow", width=80, height=2)

               btn4 = Button(win,  text="클릭하세요4", fg="blue", bg="yellow", width=80, height=2)

 

               btn1.grid(row=0, column=0)     # 0행 0열

               btn2.grid(row=0, column=1)     # 0행 1열

               btn3.grid(row=1, column=0)     # 1행 0열

               btn4.grid(row=1, column=1)     # 1행 1열          

               

3. 절대 배치 관리자(place geometry manager)

    : 사용자가 지정한 위치에 위젯들을 배치한다. place() 메소드를 사용한다.

      절대 위치는 좌표를 나타내는 x와 y 매개 변수를 사용한다.   

      ex) btn = Button(win,  text="클릭하세요1", fg="blue", bg="yellow", width=80, height=2)

             btn.place(x=20, y=60)

 

▶ 여러 배치 관리자 혼용하기

 : 하나의 컨테이너 안에 다른 컨테이너를 배치하고, 컨테이너마다 배치 관리자를 다르게 할 수 있다. 

    이 때, 컨테이너로 가장 많이 사용되는 것은 프레임(Frame)이다.