tkinter 튜토리얼에 대해서는 다루어 본 적이 있지만 좀 더 실용적으로 접근하기 위해서 새롭게 포스팅 한다.

 

윈도우버전의 파이썬을 설치하면 tkinter 는 기본 설치에 포함되어 있다.

 

바로 tkinter 로 간단한 창을 열어보자.

 

from tkinter import *

window = Tk()
window.title("Welcome to tkinter app")
window.geometry('300x200')
window.mainloop()

파이썬 답게 간결한 코드로도 윈도우창을 만들 수 있다.

 

tkinter 는 Tk() 로 인스턴스를 생성한다.

 

geometry 의 인수는 윈도우의 크기를 결정한다. title 은 창의 타이틀에 들어가는 문자열이다.

 

mainloop 메서드로 윈도우창은 이벤트 대기상태가 된다.

 

 

모듈 이름부터 보면 tkinter.Tk() 가 맞다. 타이핑이 길어지니까 from tkinter import * 을 사용하여 줄인다.

 

앞으로 사용할 tkinter 모듈의 클래스들(Label, Button 등)에도 tkinter 를 붙일 필요가 없다.

 

혹시 중복되는 이름이 있을까봐 부담스러우면 아래와 같이 as로 이름을 바꿔서 사용해도 된다.

 

이쪽이 더 안전하나 코드를 더 간단하게 하려면 from tkinter import * 으로 표기한다.

(상황에 따라 선택한다 여기서는 tk.클래스로 사용한다)

 

import tkinter as tk

window = tk.Tk()

*레이블 만들기

 

레이블은 Label 클래스로 생성한다.

import tkinter as tk

window = tk.Tk()
window.title("Welcome to tkinter app")
window.geometry('300x200')

label1 = tk.Label(window, text="Hello")
label1.grid(column = 0, row = 0)

window.mainloop()

레이블을 하나 올려놨다.

 

레이블은 사용자가 표준입출력으로 조작할 수 없고, 단순 텍스트를 표시하는 컴포넌트이다.

 

레이블을 만들기 위해 필수적인 정보들만 인수로 전달한다.

 

파이썬의 코드는 위에서 부터 읽어 내려온다. window는 인스턴스 란 것을 알 수 있다. 이 인스턴스를 Label 클래스의 생성자에 넣는 이유는 레이블이 어느 윈도우에 들어갈지 알아야하기 때문이다. 레이블이니까 당연히 들어갈 text 가 필요하다.

 

그 다음에 label1.grid 로 레이아웃을 지정하는데 어떤 컴포넌트(레이블, 버튼 등)를 생성해도 레이아웃을 지정하기 전까지는 화면에 나타나지 않는다. 레이아웃은 몇가지가 있는데 여기서는 grid (격자) 레이아웃을 사용한다. 행과 열의 매개변수를 보면 2차원으로 배열한다는 것을 알 수 있다.

 

컴포넌트의 생성과 레이아웃 지정 이 두가지 동작만으로 레이블이 추가된다.

 

그렇다면 grid 로 여러개의 레이블을 배치해보자.

 

import tkinter as tk

window = tk.Tk()
window.title("Welcome to tkinter app")
window.geometry('300x200')

label1 = tk.Label(window, text="LABEL1")
label1.grid(column = 0, row = 0)

label2 = tk.Label(window, text="LABEL2")
label2.grid(column = 1, row = 0)

label3 = tk.Label(window, text="LABEL3")
label3.grid(column = 2, row = 0)

label4 = tk.Label(window, text="LABEL4")
label4.grid(column = 3, row = 0)

label5 = tk.Label(window, text="LABEL5")
label5.grid(column = 0, row = 1)

label6 = tk.Label(window, text="LABEL6")
label6.grid(column = 1, row = 1)

label7 = tk.Label(window, text="LABEL7")
label7.grid(column = 2, row = 1)

label8 = tk.Label(window, text="LABEL8")
label8.grid(column = 3, row = 1)

window.mainloop()

 

8개의 레이블을 만들고 4열 2행으로 배치했다.

 

복잡해 보이지만 단순한 나열이다. 레이블이 아니라 버튼이나 텍스트필드 등 다른 컴포넌트도 배치할 수 있다.

 

 

*폰트 변경

 

기본 폰트는 어딘가 좀 부족하다. 레이블 생성시에 폰트를 변경할 수 있다.

label1 = tk.Label(window, text="LABEL1", font=("Courier",30))
label1.grid(column = 0, row = 0)

 

버튼 추가하기

추가하는 방법은 기본적으로 레이블과 같다. 생김새로 봐도 윈도우에 붙이는 과정은 같은 것이다. tk.Button 클래스를 생성한다.

 

button1 = tk.Button(window, text="counter")
button1.grid(column=0, row=1)

아래에 튀어나온 버튼이 보인다. row 가 1이라는 것은 두번째 행이다. 첫번째 행은 0에서 시작한다.

 

* 20까지 세는 카운터 만들기

import tkinter as tk

window = tk.Tk()
window.title("Welcome to tkinter app")
window.geometry('300x100')

count = 0

label1 = tk.Label(window, text=("count: "+str(count)), font=("Courier",30))
label1.grid(column=0, row=0)


def counter_click():
    global count
    count += 1
    label1.configure(text="count: "+str(count))
    if count == 20:
        count = 0


button1 = tk.Button(window, text="counter", command=counter_click)
button1.grid(column=0, row=1)

window.mainloop()

버튼을 사용해서 20까지 세는 카운터를 만들어봤다. 버튼을 생성하는 것까지는 레이블과 다를바 없지만 버튼에는 클릭했을 때 발생하는 동작을 지정해 줄 수 있다. 동작은 함수나 메서드를 사용한다. 위에서는 함수 def counter_click을 사용했다. 버튼의 생성시에 command 매개변수에 함수의 참조를 보낸다. (counter_click이 () 가 아닌 것에 주의한다) 참조를 보내는 것은 버튼 생성자에서 함수를 호출하지 않고 이벤트 처리기에 등록시키기 위해서 이다.

 

버튼이 클릭될 때마다 command에 참조된 함수가 실행된다. 이것은 0부터 20까지 반복하는 카운터이다.

 

이 간단한 구조만 가지고도 다양한 프로그램을 만들어 볼 수 있다. 파이썬도 처음에는 명령 프롬프트에서 시작하게 되는데 간단한 코드로 윈도우창으로 만들어 보는 것도 나쁘지 않을 것이다.

 

 

 

*이전 포스팅 - tkinter 관련

 

파이썬 GUI 프로그래밍 1 Tkinter 유래와 윈도우창 참고사이트 모음

파이썬으로 GUI 프로그래밍을 시작하기 위한 가장 빠른 방법은 Tkinter 모듈을 사용하는 것이다. Tkinter는 쉽게말해 파이썬으로 GUI 윈도우 창을 만들 수 있게 해주는 프레임웤(윈도우 만들기 도구)

digiconfactory.tistory.com

 

공유하기

facebook twitter kakaoTalk kakaostory naver band