6일차_파이썬으로 계산기 만들어버리기

코린이·2022년 4월 19일
1
post-thumbnail

오늘 한 것!


유튜브를 보면서 만든 초초초 간단 계산기 두두등장!
기왕 만드는거 '남들과는 다른 비주얼로 해보자!' 컨셉을 잡았다

● 다채롭게 구성하기
● 미니멀리즘을 추구! 아기자기한 디자인 만들기
● 한글쓰기

다채롭게 구성하기

다양한 색상을 쓰려다 보니 색상을 어떻게 넣는지 부터 알아야 했다.
배경색은 ※bg="###" 글자 색상은 ※fg="###" 이란 명령어를 찾아냈다.
그럼 그 색상은? 어도비에서 사용하는 컬러코드 같은 것을 사용하나? 해서
평소 편집자 시절 좋아하던 코드를 꺼내려 했으나 아니었다...
Red, yellow, black 등등 기본적인 색상들 뿐이어서 더 찾아봤는데
CSS 컬러 차트가 따로 있네? 마치 화방에 들어온 듯한 구성에 놀라서

바로 찍먹 들어갑니다! 했는데... 막상 결과물에서 보여주는 색상은 저렇지 않았다
심지어 다른 색상명에도 구분이 가지 않는 것들도 보였다... 그래서 간단히(?)
꾸미고 나왔다

미니멀리즘


작고 아담하게... 그리고 기능이 충실하게 다다이즘에 입각한 계산기(라고 거창하게 포장)
그 결과로 작아져 보이지 않는 글자들이 문제가 되었다. 그럼 어떻게? 사이즈를 키우는 방법도
있지만 나는 폰트를 바꾸는 방법을 택했다. 😁기왕 공부하는 거니까😁

※ fontStyle = tkFont.Font(family="bauhaus 93", size=10)

위에 폰트스타일을 정의해놓고서 아래 font = fontstyle 이라고 넣어주니 편했다.
폰트를 정하기까지 여러 생각이 스쳤는데, 내가 영상 편집에 쓸 폰트들을 마구 받아놓다보니
기본적으로 제공되는 폰트인지 모르겠는 것이다! 다른 자리에서 해당 폰트가 없으면
문제가 발생할거니까... 그렇다고 기본적인 고딕이나 바탕체는 작으면 잘 안보이고
너무 흔해서 바꾼 줄도 모를 것이 뻔했기 때문이다.
그래서 바우하우스 체로 택했다.

한글쓰기


이쪽으로 넘어오고 나서는 한글보기가 드물어졌다. 생각해보면 이 일지를 쓰고 있는 시간이
한글을 가장 많이 하고 있는게 아닌가 싶었다. 그래서 앞으로의 계획에도 가능하면 한글을 많이
사용하는 코딩을 하고 싶어졌다. 그 첫 발자국으로 기본적인 사칙연산의 심볼 대신에 한글로 마무리를 하였다

끝으로


앞으로 할 건 많은데... 초보자라 아직은 시간소요가 굉장하다. 물론 그 과정에서 오늘처럼
색상때문에 고민하는 불필요한 시간도 있었지만, 도저히 문제를 모르겠는 에러의 연속으로
몇번씩 밀어버리기를 반복하는 시간이 나는 가장 아까운 것 같다. 거기에 자존감도 떨어지는게 속상하기 그지없다. 그래도 어제처럼 오늘도 긍정적인 공감한 것은 아직까지도 이 코딩은 너무 복잡하고 그 복잡함을 개선할 수 있는 여지가 있다는 것이다(방법을 아직 모르지만...)버튼들 코드를 많이 줄여서 쓸 수 있는 방법을 유튜브에서 함께 알려주었지만, 오늘은 내가 버튼별로 색상을 주느라 길게 나열했다. 복잡한 코드를 간단하게 줄여서 쓰는 여러 방법들이 존재하고, 그걸 내가 연구한다면 그게 경력이고, 때로는 새로운 수익을 창출해낼 수 있는 점이 되지 않을까 싶다.

오늘 만든 계산기는 1차례의 계산만 가능하고 복합연산은 아직 못한다. 내게는 아직 다음 챕터가
남아있어 다음을 기약하려 한다. 훗날 이 미니계산기 ver.0.0.1을 업그레이드 해줄 미래의 나에게
"화이팅..."

오늘 만든 계산기 파이썬 코드

import tkinter as tk
import tkinter.font as tkFont

window = tk.Tk()
window.title('간단계산기')

fontStyle = tkFont.Font(family="bauhaus 93", size=10)


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

def num_click(value):
    global disValue
    disValue = (disValue*10) + value
    str_value.set(disValue)

def clear():
    global disValue, stoValue, opPpe
    stoValue = 0
    opPpe = 0
    disValue = 0
    str_value.set(disValue)

def operator_click(value):
    global disValue, operator, stoValue, opPpe
    op = operator[value]
    if op == 5:  # clear
        clear()
    elif disValue == 0:
        opPpe = 0
    elif opPpe == 0:
        opPpe = op
        stoValue = disValue
        disValue = 0
        str_value.set(disValue)
    elif op == 6: #결과
        if opPpe == 1: #더하기
            disValue = stoValue + disValue
        if opPpe == 2: #빼기
            disValue = stoValue - disValue
        if opPpe == 3: #곱하기
            disValue = stoValue * disValue
        if opPpe == 4: #나누기
            disValue = stoValue / disValue

        str_value.set(disValue)
        disValue = 0
        stoValue = 0
        opPpe = 0
    else:
        clear()

def button_click(value):
    try:
        value=int(value)
        num_click(value)
    except:
        operator_click(value)



str_value = tk.StringVar()
str_value.set(str(disValue))
calculated = tk.Entry(window, textvariable=str_value, justify='center',font=fontStyle, bg = 'black', fg = 'lime')
calculated.grid(column=0, row=0, columnspan = 4, ipadx = 20, ipady = 15)

#버튼(숫자패드)
tk.Button(window, text='1',font=fontStyle, width=5, height=2, bg="oldlace",
          command = lambda cmd='1': button_click(cmd)).grid(column=0, row=1)
tk.Button(window, text='2',font=fontStyle, width=5, height=2, bg="yellow",
          command = lambda cmd='2': button_click(cmd)).grid(column=1, row=1)
tk.Button(window, text='3',font=fontStyle, width=5, height=2, bg="orange",
          command = lambda cmd='3': button_click(cmd)).grid(column=2, row=1)
tk.Button(window, text='4',font=fontStyle, width=5, height=2, bg="mistyrose",
          command = lambda cmd='4': button_click(cmd)).grid(column=0, row=2)
tk.Button(window, text='5',font=fontStyle, width=5, height=2, bg="lightcoral",
          command = lambda cmd='5': button_click(cmd)).grid(column=1, row=2)
tk.Button(window, text='6',font=fontStyle, width=5, height=2, bg="tomato",
          command = lambda cmd='6': button_click(cmd)).grid(column=2, row=2)
tk.Button(window, text='7',font=fontStyle, width=5, height=2, bg="thistle",
          command = lambda cmd='7': button_click(cmd)).grid(column=0, row=3)
tk.Button(window, text='8',font=fontStyle, width=5, height=2, bg="darkorchid",
          command = lambda cmd='8': button_click(cmd)).grid(column=1, row=3)
tk.Button(window, text='9',font=fontStyle, width=5, height=2, bg="purple",
          command = lambda cmd='9': button_click(cmd)).grid(column=2, row=3)
tk.Button(window, text='0',font=fontStyle, width=11, height=2, bg="darkgray",
          command = lambda cmd='0': button_click(cmd)).grid(column=0, row=4,columnspan=2)
#버튼(함수)
tk.Button(window, text='C',font=fontStyle, width=5, height=2, bg="dimgray",
          command = lambda cmd='c': button_click(cmd)).grid(column=2, row=4)
tk.Button(window, text='곱하기',font=fontStyle, width=6, height=2, bg="darkslategray", fg="snow",
          command = lambda cmd='*': button_click(cmd)).grid(column=3, row=1)
tk.Button(window, text='빼기',font=fontStyle, width=6, height=2, bg="darkslategray", fg="snow",
          command = lambda cmd='-': button_click(cmd)).grid(column=3, row=2)
tk.Button(window, text='더하기',font=fontStyle, width=6, height=2, bg="darkslategray", fg="snow",
          command = lambda cmd='+': button_click(cmd)).grid(column=3, row=3)
tk.Button(window, text='나누기',font=fontStyle, width=6, height=2, bg="darkslategray", fg="snow",
          command = lambda cmd='/': button_click(cmd)).grid(column=3, row=4)
tk.Button(window, text='결과',font=fontStyle, width=25, height=2, bg="midnightblue", fg="snow",
          command = lambda cmd='=': button_click(cmd)).grid(column=0, row=5, columnspan=4)

window.mainloop()
profile
갓 코딩 시작한 코린이

1개의 댓글

comment-user-thumbnail
2022년 4월 20일

ㅋㅋㅋㅋ 다채로운 색상 너무 좋은데요?!

답글 달기