[스터디-M] Python으로 계산기 구현하기

김지연·2023년 3월 19일
0

스터디_hywu

목록 보기
2/2
post-thumbnail

1. 화면 초기화

코드

from tkinter import *
from tkinter import ttk

# 함수 추가할 부분

root = Tk()
root.title("계산기")
root.geometry("200x200")

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

root.mainloop()

실행결과


2. 출력창, 버튼 추가

코드

from tkinter import *
from tkinter import ttk

# 함수 추가할 부분

root = Tk()
root.title("계산기")
root.geometry("200x200")

# 숫자 및 결과 표시창
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()

실행결과

3. 버튼에 명령추가

코드

from tkinter import *
from tkinter import ttk

# 함수 추가할 부분

root = Tk()
root.title("계산기")
root.geometry("200x200")

# 숫자 및 결과 표시창
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()

실행결과

4. 버튼에 함수연결

코드

from tkinter import *
from tkinter import ttk

# 함수 추가할 부분
# 함수 추가
def button_pressed(value) :
    print(value, "pressed")

root = Tk()
root.title("계산기")
root.geometry("200x200")

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

# 숫자 및 결과 표시창
number_entry = ttk.Entry(root, width=20)
number_entry.grid(row=0, columnspan=1)

#숫자버튼 , command=lambda: 뒤에 함수 연결 전달 값은 버튼의 숫자 1
button1 = ttk.Button(root, text="1", command=lambda:button_pressed('1'))
button1.grid(row=1, column=0)

root.mainloop()

실행결과


5. 텍스트 창에 숫자 표시하기

코드

from tkinter import *
from tkinter import ttk

# 함수 추가할 부분
# 함수 추가
def button_pressed(value) :
    #텍스트 창으로 숫자 전송, 'end'는 오른쪽 끝에 추가한다는 뜻
    number_entry.insert('end',value)
    print(value, "pressed")

root = Tk()
root.title("계산기")
root.geometry("400x400")

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

# 텍스트창의 값 저장할 변수
entry_value = StringVar(root, value='')

# 숫자 및 결과 표시창
#textvariable 속성으로 변수 설정
number_entry = ttk.Entry(root, textvariable=entry_value, width=10)
number_entry.grid(row=0, columnspan=1)

#숫자버튼 , command=lambda: 뒤에 함수 연결 전달 값은 버튼의 숫자 1
button1 = ttk.Button(root, text="1", command=lambda:button_pressed('1'))
button1.grid(row=1, column=0)

root.mainloop()

실행결과


6. 숫자버튼 생성(1~9)

코드

from tkinter import *
from tkinter import ttk

# 함수 추가할 부분
# 함수 추가
def button_pressed(value) :
    #텍스트 창으로 숫자 전송, 'end'는 오른쪽 끝에 추가한다는 뜻
    number_entry.insert('end',value)
    print(value, "pressed")

root = Tk()
root.title("계산기")
#버튼 크기에 맞게 수정
root.geometry("250x200")

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

# 텍스트창의 값 저장할 변수
entry_value = StringVar(root, value='')

# 숫자 및 결과 표시창
#textvariable 속성으로 변수 설정
number_entry = ttk.Entry(root, textvariable=entry_value, width=20)
#columspan 은 여러칸에 걸쳐서 표시
number_entry.grid(row=0, columnspan=3)

#숫자버튼 , command=lambda: 뒤에 함수 연결
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. 나머지 버튼 추가

코드

from tkinter import *
from tkinter import ttk

# 함수 추가할 부분
# 함수 추가
def button_pressed(value) :
    #텍스트 창으로 숫자 전송, 'end'는 오른쪽 끝에 추가한다는 뜻
    number_entry.insert('end',value)
    print(value, "pressed")

def math_button_pressed(value) :
    print(value, "pressed")

def equal_button_pressed(value) :
    print(value, "pressed")

root = Tk()
root.title("계산기")
#버튼 크기에 맞게 수정
root.geometry("350x200")

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

# 텍스트창의 값 저장할 변수
entry_value = StringVar(root, value='')

# 숫자 및 결과 표시창
#textvariable 속성으로 변수 설정
number_entry = ttk.Entry(root, textvariable=entry_value, width=20)
#columspan 은 여러칸에 걸쳐서 표시
number_entry.grid(row=0, columnspan=3)

#숫자버튼 , command=lambda: 뒤에 함수 연결
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()

실행결과


8. 각 버튼별 함수 만들기

코드

from tkinter import *
from tkinter import ttk

# 연산자 저장 변수
operation = ''
# 이전값 저장 변수
temp_number = 0

# 함수 추가할 부분
# 숫자 함수
def button_pressed(value) :
    #텍스트 창으로 숫자 전송, 'end'는 오른쪽 끝에 추가한다는 뜻
    # AC 입력되었을 경우
    if value == 'AC' :
        number_entry.delete(0,'end')
        print("AC pressed")
    # 0~9 입력되었을 경우
    else :
        number_entry.insert('end',value)
        print(value, "pressed")

#사칙연산 함수
def math_button_pressed(value) :
    # 함수 바깥의 글로벌 변수 사용
    global operation
    global temp_number
    #기존에 입력한 숫자가 있을때만 연산버튼 인식함
    if not number_entry.get() == '' :
        operation = value
        # 입력된 숫자를 임시변수로 옮기기
        temp_number = int(number_entry.get())
        # 입력칸을 비우고, 다음 숫자를 입력받을 준비
        number_entry.delete(0,'end')
        print(temp_number, operation)

# 결과버튼 함수
def equal_button_pressed(value) :
    global operation
    global temp_number
    #연산자나 숫자가 입력되지 않으면, 실행하지 않음
    if not (operation == '' and number_entry.get()==''):
        number = int(number_entry.get())
        if operation == '/' :
            solution = temp_number / number
        elif operation == '*' :
            solution = temp_number * number
        elif operation == '+' :
            solution = temp_number + number
        else :
            solution = temp_number - number

        #계산후 숫자표시칸을 비우고 계산결과 표시
        number_entry.delete(0, 'end')
        number_entry.insert(0,solution)
        print(temp_number, operation,number,"=",solution)
        operation = ''
        temp_number = 0

root = Tk()
root.title("계산기")
#버튼 크기에 맞게 수정
root.geometry("350x200")

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

# 텍스트창의 값 저장할 변수
entry_value = StringVar(root, value='')

# 숫자 및 결과 표시창
#textvariable 속성으로 변수 설정
number_entry = ttk.Entry(root, textvariable=entry_value, width=20)
#columspan 은 여러칸에 걸쳐서 표시
number_entry.grid(row=0, columnspan=3)

#숫자버튼 , command=lambda: 뒤에 함수 연결
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()

실행결과


참고 사이트

profile
천천히 꾸준히 하는 블로그

0개의 댓글