현실에서 사용되는 계산기와 같은 모습의 계산기 만들기
1. 기능
- '+', '-', '*',' /' 등 의 연산 기능과 'C' (Clear), '=' 등의 부가 기능.
- 다음 순서의 버튼 누르기 가능
- '105' → '+' → '30' → '-' → 70 → '*' → '2' → '/' → '=' : 26
2. 코드
import tkinter as tk
input_value, post_value = 0, 0 # 첫번째 숫자, 두번째 숫자
operator_pre = 0 # '+', '-', '*', '/' : 계산할 연산자 기억용.
operator = {'+':1, '-':2, '/':3, '*':4, 'C':5, '=':6}
### 0~9 숫자
def number_click(value): # value 누른 숫자
global input_value # 기존 숫자
input_value = (input_value*10) + value # 숫자 클릭시 10의 자리씩 이동한다.
str_value.set(input_value)
### C 버튼 - Clear할때
def clear():
global input_value, post_value, operator_pre
input_value, post_value, operator_pre = 0, 0, 0
str_value.set(str(input_value)) # 화면을 지운다.
### + ~ = 연산자를 클릭했을때
def oprator_click(value):
global input_value, operator, post_value, operator_pre
#value의 값에 따라 숫자로 연산자를 변경한다.(+는 1로, -는 2로..)
op = operator[value]
if op == 5:
clear()
elif op == 6: #'='
if operator_pre == 1: # +
post_value = post_value + input_value
if operator_pre == 2: # -
post_value = post_value - input_value
if operator_pre == 3: # /
post_value = post_value / input_value
if operator_pre == 4: # *
post_value = post_value * input_value
str_value.set(str(post_value)) # 최종 결과 값 출력
input_value, operator_pre = 0, 0
# elif input_value == 0: #현재 화면에 출력된 값이 0일때
# operator_pre = 0
# 두가지 경우 => 새로 연산 시작, 기존 값에서 이어서 연산하는 경우
elif operator_pre == 0: # 계산이 끝난 후 연산자가 0
operator_pre = op # 현재 눌린 연산자
if post_value == 0: # ex) 23+
post_value = input_value # 현재까지의 숫자를 적립
input_value = 0
str_value.set(str(input_value))
else: # ex) +34
str_value.set(str(0))
pass
else:
clear()
def button_click(value):
try: # 정수 여부 확인
value = int(value)
number_click(value)
except: # 연산자
oprator_click(value)
win = tk.Tk()
win.title('계산시')
str_value = tk.StringVar()
str_value.set(str(input_value))
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)
calItem = [['1','2','3','4'],
['5', '6', '7', '8'],
['9', '0', '+', '-'],
['/', '*', 'C', '=']]
# 계산기 UI + 버튼 COMMAND 등록
for i,items in enumerate(calItem): # items : list
for k,item in enumerate(items):
try:
color = int(item)
color = 'black'
except:
color = 'green'
bt = tk.Button(win, text=item, width=10, height=5, bg=color, fg = 'white',
command = lambda cmd=item: button_click(cmd))
bt.grid(column=k, row=(i+1))
win.mainloop()
'내배캠 (22.04~22.08)' 카테고리의 다른 글
Pygame - 순발력 테스트 1 to 50 (2) (1) | 2022.04.26 |
---|---|
Pygame - 순발력 테스트 1 to 50 (1) (0) | 2022.04.25 |
Team Introduction 프로젝트 KPT 회고 (0) | 2022.04.22 |
기억력 테스트 게임 with Pygame (0) | 2022.04.14 |
오락실 고전 게임 with Pygame (0) | 2022.04.14 |