[Python] 자동화 프로그램(GUI편 - 기본 틀 제작)

import tkinter as tk
 
window = tk.Tk()
window.title("tkinter app")
window.geometry('300x200')
 
label1 = tk.Label(window, text="Hello")
label1.grid(column = 0, row = 0)
 
window.mainloop()

기본 틀

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

 

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

앞으로 사용할 tkinter 모듈의 클래스들(Label, Button 등)에도

tkinter 를 붙일 필요가 없다.

 

title 은 창의 타이틀에 들어가는 문자열이다.

geometry 의 인수는 윈도우의 크기를 결정한다.

 

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

 

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

레이블은 사용자가 표준입출력으로 조작할 수 없고,

단순 텍스트를 표시하는 컴포넌트이다.

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

 

파이썬의 코드는 위에서 부터 읽어 내려온다.

window는 인스턴스 란 것을 알 수 있다.

이 인스턴스를 Label 클래스의 생성자에 넣는 이유는

레이블이 어느 윈도우에 들어갈지 알아야하기 때문이다.

레이블이니까 당연히 들어갈 text 가 필요하다.

 

그 다음에 label1.grid 로 레이아웃을 지정하는데

어떤 컴포넌트(레이블, 버튼 등)를 생성해도

레이아웃을 지정하기 전까지는 화면에 나타나지 않는다.

 

레이아웃은 몇가지가 있는데 여기서는 grid (격자) 레이아웃을 사용한다.

행과 열의 매개변수를 보면 2차원으로 배열한다는 것을 알 수 있다.

 

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

 

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

import tkinter as tk
 
window = tk.Tk()
window.title("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()

4열 2행 정렬

복잡해 보이지만 단순한 나열이다.

레이블이 아니라 버튼이나 텍스트필드 등 다른 컴포넌트도 배치할 수 있다.

 

버튼추가하기

추가하는 방법은 기본적으로 레이블과 같다.

생김새로 봐도 윈도우에 붙이는 과정은 같은 것이다.

tk.Button 클래스를 생성한다.

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

버튼 설정에 grid(column =0, row=0)이 들어가

LABLE1의 자리를 뺏은걸 볼수있다.

 

*버튼으로 카운터 만들어보기

import tkinter as tk
 
window = tk.Tk()
window.title("tkinter app")
window.geometry('200x100')
 
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 == 10:
        count = 0
 
 
button1 = tk.Button(window, text="counter", command=counter_click)
button1.grid(column=0, row=1)
 
window.mainloop()

버튼을 사용해서 10까지 세는 카운터를 만들어봤다.

버튼을 생성하는 것까지는 레이블과 다를바 없지만

버튼에는 클릭했을 때 발생하는 동작을 지정해 줄 수 있다.

동작은 함수나 메서드를 사용한다.

위에서는 함수 def counter_click을 사용했다.

버튼의 생성시에 command 매개변수에 함수의 참조를 보낸다.

(counter_click이 () 가 아닌 것에 주의한다)

참조를 보내는 것은 버튼 생성자에서 함수를 호출하지 않고

이벤트 처리기에 등록시키기 위해서 이다.