파이썬_실전 프로젝트

계산기 만들기 - 파이썬 tkinter 모듈

파이썬의 tkinter 모듈은 각종 그래픽 인터페이스를 만들어주는 모듈입니다.

tkinter 모듈을 이용하면, 간단한 계산기 프로그램을 만들수 있습니다.

 

혹시 tkinter 가 import 가 안되면,tkinter 를 설치해야 합니다.

공통 : http://www.tkdocs.com/tutorial/install.html

맥 : https://www.python.org/download/mac/tcltk/

리눅스 : sudo apt-get install python3-tk(파이썬3의 경우)

 

설치하고, 파이썬 실행후에, import 가 정상적으로 되는지, import 후에 tkinter._test() 라고 입력하면, 테스트창이 잘뜨는지 확인하시면 됩니다.

버전확인은 tkinter.Tcl().eval('info patchlevel') 라고 명령을 입력하면 됩니다.

 

간단한 계산기라도 여러가지 경우의 수를 고려하면 구현해야 할것들이 많이 있지만, 일단 기본적인 연산만 가능하도록 만들어 보겠습니다.

 

화면 초기화

 

from tkinter import *
from tkinter import ttk

#함수 추가할 부분 

root = Tk()
root.title("Calculator")
root.geometry("200x200")

#인터페이스(버튼,창) 추가할 부분.

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)

#숫자 버튼.
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()

 

이제 함수를 만들어야 겠네요. 다음 토픽에 이어서 하도록 하겠습니다.

댓글

댓글 본문
작성자
비밀번호
버전 관리
nomadlife
현재 버전
선택 버전
graphittie 자세히 보기