파이썬의 tkinter 모듈은 각종 그래픽 인터페이스를 만들어주는 모듈입니다.
tkinter 모듈을 이용하면, 간단한 계산기 프로그램을 만들수 있습니다.
import tkinter 를 실행해보시고, 모듈이 없으시면, anaconda 소프트웨어를 설치할것을 추천합니다.
간단한 계산기라도 여러가지 경우의 수를 고려하면 구현해야 할것들이 많이 있지만, 일단 기본적인 연산만 가능하도록 만들어 보겠습니다.
화면 초기화
from tkinter import * from tkinter import ttk #함수 추가할 부분 root = Tk() root.title("Calculator") root.geometry("200x200") #인터페이스(버튼,창) 추가할 부분. root.mainloop()
ttk.Tk() 클래스는 기존의 Tk()클래스보다 그래픽이 부분 개선되었습니다. 기능은 거의 동일한 걸로 보입니다.
https://docs.python.org/3/library/tkinter.ttk.html
출력창, 버튼 추가
from tkinter import * from tkinter import ttk root = Tk() root.title("Calculator") root.geometry("100x100") #숫자 및 결과 표시창. number_entry = ttk.Entry(root, width=20) number_entry.grid(row=0, columnspan=1) #숫자 버튼. button1 = ttk.Button(root, text="1") button1.grid(row=1, column=0) root.mainloop()
버튼에 명령추가
from tkinter import * from tkinter import ttk root = Tk() root.title("Calculator") root.geometry("100x100") number_entry = ttk.Entry(root, width=20) number_entry.grid(row=0, columnspan=1) # command=lambda: 뒤에 명령 작성. button1 = ttk.Button(root, text="1", command=lambda:print("button 1")) button1.grid(row=1, column=0) root.mainloop()
button 1 button 1
버튼에 함수연결
from tkinter import * from tkinter import ttk #함수 추가. def button_pressed(value): print(value,"pressed") root = Tk() root.title("Calculator") root.geometry("100x100") number_entry = ttk.Entry(root, width=20) number_entry.grid(row=0, columnspan=1) # command에 함수 연결. 전달값은 버튼의 숫자 '1' button1 = ttk.Button(root, text="1", command=lambda:button_pressed('1')) button1.grid(row=1, column=0) root.mainloop()
1 pressed 1 pressed
텍스트 창에 숫자 표시하기
from tkinter import * from tkinter import ttk def button_pressed(value): number_entry.insert("end",value) #텍스트 창으로 숫자 전송.'end'는 오른쪽끝에 추가하라는 의미. print(value,"pressed") root = Tk() root.title("Calculator") root.geometry("100x100") #텍스트창의 값 저장할 변수. entry_value = StringVar(root, value='') #textvariable 속성으로 변수 설정. number_entry = ttk.Entry(root, textvariable = entry_value, width=10) number_entry.grid(row=0, columnspan=1) button1 = ttk.Button(root, text="1", command = lambda:button_pressed('1')) button1.grid(row=1, column=0) root.mainloop()
1 pressed 1 pressed 1 pressed 1 pressed
숫자버튼 생성(1~9)
한줄에 3개씩 3줄, grid에 row값 1~3, column값 0~2, row=0은 entry 위치
from tkinter import * from tkinter import ttk def button_pressed(value): number_entry.insert("end",value) print(value,"pressed") root = Tk() root.title("Calculator") root.geometry("250x200") # 버튼폭에 맞춰서 확장. entry_value = StringVar(root, value='') number_entry = ttk.Entry(root, textvariable = entry_value, width=20) number_entry.grid(row=0, columnspan=3) #columnspan 은 여러칸에 걸쳐서 표시함. # button 9개 추가 button7 = ttk.Button(root, text="7", command = lambda:button_pressed('7')) button7.grid(row=1, column=0) button8 = ttk.Button(root, text="8", command = lambda:button_pressed('8')) button8.grid(row=1, column=1) button9 = ttk.Button(root, text="9", command = lambda:button_pressed('9')) button9.grid(row=1, column=2) button4 = ttk.Button(root, text="4", command = lambda:button_pressed('4')) button4.grid(row=2, column=0) button5 = ttk.Button(root, text="5", command = lambda:button_pressed('5')) button5.grid(row=2, column=1) button6 = ttk.Button(root, text="6", command = lambda:button_pressed('6')) button6.grid(row=2, column=2) button1 = ttk.Button(root, text="1", command = lambda:button_pressed('1')) button1.grid(row=3, column=0) button2 = ttk.Button(root, text="2", command = lambda:button_pressed('2')) button2.grid(row=3, column=1) button3 = ttk.Button(root, text="3", command = lambda:button_pressed('3')) button3.grid(row=3, column=2) root.mainloop()
7 pressed 8 pressed 9 pressed 4 pressed 5 pressed 6 pressed 1 pressed 2 pressed 3 pressed
나머지 버튼 추가
사칙연산버튼(/*+-)은 math_button_pressed() 함수로 연결. '='버튼은 equal_button_pressed() 함수로 연결. AC 버튼, 0 버튼은 기존의 button_pressed() 로 연결.
from tkinter import * from tkinter import ttk def button_pressed(value): number_entry.insert("end",value) print(value,"pressed") def math_button_pressed(value): print(value,"pressed") def equal_button_pressed(): print("equal pressed") root = Tk() root.title("Calculator") root.geometry("300x200") # 화면폭에 맞춰서 늘려줌. entry_value = StringVar(root, value='') number_entry = ttk.Entry(root, textvariable = entry_value, width=20) number_entry.grid(row=0, columnspan=3) button7 = ttk.Button(root, text="7", command = lambda:button_pressed('7')) button7.grid(row=1, column=0) button8 = ttk.Button(root, text="8", command = lambda:button_pressed('8')) button8.grid(row=1, column=1) button9 = ttk.Button(root, text="9", command = lambda:button_pressed('9')) button9.grid(row=1, column=2) # 나누기 버튼 -> math_button_pressed() 로 연결. button_div = ttk.Button(root, text="/", command = lambda:math_button_pressed('/')) button_div.grid(row=1, column=3) button4 = ttk.Button(root, text="4", command = lambda:button_pressed('4')) button4.grid(row=2, column=0) button5 = ttk.Button(root, text="5", command = lambda:button_pressed('5')) button5.grid(row=2, column=1) button6 = ttk.Button(root, text="6", command = lambda:button_pressed('6')) button6.grid(row=2, column=2) # 곱하기 버튼 -> math_button_pressed() 로 연결. button_mult = ttk.Button(root, text="*", command = lambda:math_button_pressed('*')) button_mult.grid(row=2, column=3) button1 = ttk.Button(root, text="1", command = lambda:button_pressed('1')) button1.grid(row=3, column=0) button2 = ttk.Button(root, text="2", command = lambda:button_pressed('2')) button2.grid(row=3, column=1) button3 = ttk.Button(root, text="3", command = lambda:button_pressed('3')) button3.grid(row=3, column=2) #더하기 버튼 -> math_button_pressed() 로 연결. button_add = ttk.Button(root, text="+", command = lambda:math_button_pressed('+')) button_add.grid(row=3, column=3) #마지막줄 AC,0,=,- 버튼추가 # -버튼 -> math_button_pressed() 로 연결. # AC,0 버튼 -> button_pressed() 로 연결 # = 버튼 -> equal_button_pressed() 로 연결 button_ac = ttk.Button(root, text="AC", command = lambda:button_pressed('AC')) button_ac.grid(row=4, column=0) button0 = ttk.Button(root, text="0", command = lambda:button_pressed('0')) button0.grid(row=4, column=1) button_equal = ttk.Button(root, text="=", command = lambda:equal_button_pressed()) button_equal.grid(row=4, column=2) button_sub = ttk.Button(root, text="-", command = lambda:math_button_pressed('-')) button_sub.grid(row=4, column=3) root.mainloop()
이제 함수를 만들어야 겠네요. 다음 토픽에 이어서 하도록 하겠습니다.