본문 바로가기
Python

1. 파이썬 계산기 만들기

by 새싹_v 2022. 8. 17.
728x90


 

 

기초 계산기 만들기

 

 

import tkinter as tk

disValue = 0
operator = {'+':1, '-':2, '/':3, '*':4, 'C':5, '=':6}
stoValue = 0
opPre = 0

# 0 ~ 9까지의 숫자를 클릭했을 때
def number_click(value):
    # print('숫자',value)
    global disValue                  #global 전역변수 사용
    disValue = (disValue*10) + value #숫자를 클릭할때마다 10의 자리씩 이동한다.
    str_value.set(disValue)          #화면에 숫자를 나타낸다.

# C를 클릭하여 clear할때
def clear():
    global disValue, stoValue, opPre
    #주요 변수 초기화
    stoValue = 0
    opPre = 0
    disValue = 0
    str_value.set(disValue) #화면을 지운다.

# + ~ = 연산자를 클릭했을때
def oprator_click(value):
    # print('명령', value)
    global disValue, operator, stoValue, opPre

    #value의 값에 따라 숫자로 연산자를 변경한다.(+는 1로, -는 2로)
    op = operator[value]        #입력된 명령어가 op에 operator의 value(1,2,3,4,5,6)로 들어옴

    if op == 5: # C (clear)
        clear()
    elif disValue == 0:         #현재 화면에 출력된 값이 0일때
        opPre = 0               
    elif opPre == 0:            #연산자가 한번도 클릭되지 않았을 때
        opPre = op              #현재 눌린 연산자가 잇으면 저장
        stoValue = disValue     #현재까지의 숫자를 저장
        disValue = 0            #연산자 이후의 숫자를 받기 위해 초기화
        str_value.set(disValue) #0으로 다음 숫자를 받을 준비
    elif op == 6: #'=           # = 결과를 계산하고 출력한다.
        if opPre == 1:          # (+)
            disValue = stoValue + disValue
        if opPre == 2:          # (-)
            disValue = stoValue - disValue    
        if opPre == 3:          # (/)
            disValue = stoValue / disValue
        if opPre == 4:          # (*)
            disValue = stoValue * disValue

        str_value.set(disValue) #최종 결과 값을 출력한다
        disValue = 0
        stoValue = 0
        opPre = 0
    else:
        clear()

def button_click(value):
    # print(value)
    try:
        value = int(value)      #정수로 변환한다
        #정수가 아닌경우 excep가 발생하여 아래 except로 이동
        number_click(value)     #정수인 경우 number_click()호출
    except:                     
        oprator_click(value)    #정수가 아닌 연산자인 경우 여기로!



win = tk.Tk()
win.title('계산기')


str_value = tk.StringVar()
str_value.set(str(disValue)) #str을 사용해서 숫자를 문자로 변환
dis = tk.Entry(win, textvariable=str_value, justify='right', bg = 'white', fg = 'red')
dis.grid(column=0,row=0, columnspan = 4, ipadx=80, ipady=30) #ipadx : x축방향 길이, ipady : y축방향 길이

calItem = [['1','2','3','4'],
            ['5','6','7','8'],
            ['9','0','+','-'],
            ['/','*','C','=']]                
                            
for i,items in enumerate(calItem):      #enumerate : 리스트가 있는 경우 순서와 리스트의 값을 전달하는 기능. 
                                        #i : 인덱스 , items : 각 리스트 호출
    for k,item in enumerate(items):

        try:
            color = int(item)
            color = 'skyblue'   #숫자버튼 색주기
        except:
            color = 'yellow'    #연산자버튼 색주기
           
        bt = tk.Button(win, 
            text=item,
            width=10, 
            height=5,
            bg = color,         # bg(background) : 배경색상
            fg = 'black',       # fg :폰트 색상
            command = lambda cmd=item: button_click(cmd) #받아온 item을 cmd변수에 넣고 이 cmd를 버튼에 인자로 넣어준다.
            )
        bt.grid(column=k, row=(i+1))


win.mainloop()

 

결과

 

 

 

 

 

 

 

 

위에 글 내용은 오류 사항이 존재할 수 있습니다!

수정 사항이 있을 시 알려주시면 감사하겠습니다.

 

728x90

댓글