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()
복잡해 보이지만 단순한 나열이다.
레이블이 아니라 버튼이나 텍스트필드 등 다른 컴포넌트도 배치할 수 있다.
버튼추가하기
추가하는 방법은 기본적으로 레이블과 같다.
생김새로 봐도 윈도우에 붙이는 과정은 같은 것이다.
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이 () 가 아닌 것에 주의한다)
참조를 보내는 것은 버튼 생성자에서 함수를 호출하지 않고
이벤트 처리기에 등록시키기 위해서 이다.