import tkinter as tk
disValue = 0
operator = {'+':1, '-':2, '/':3, '*':4, 'C':5, '=':6}
stoValue = 0
opPre = 0
## 0~9까지의 숫자를 클릭했을 때
def numClick(value):
# print('숫자', value)
global disValue
disValue =(disValue*10) + value # 숫자 클릭시 10의 자리씩 이동
str_value.set(disValue) # 화면에 숫자를 나타낸다.
## c를 클릭하여 clear할 때
def clear():
global disValue, stoValue, opPre
# 주요변수 초기화
stoValue = 0
disValue = 0
opPre = 0
str_value.set(str(disValue)) # 화면 지우기
## +, ~, = 연산자 클릭 할 때
def operClick(value):
# print('명령', value)
global disValue, operator, stoValue, opPre
# value의 값에 따라 숫자로 연산자를 변경한다.(+는 1로, -는 2로...)
op = operator[value]
if op ==5: # C(clear)
clear()
elif disValue == 0: # 현재 화면에 출력된 값이 0 일 때
opPre = 0
elif opPre == 0: # 연산자가 한번도 클릭되지 않을 때
opPre = op #현재 눌린 연산자가 있으면 저장
stoValue = disValue #현재까지의 숫자를 저장
disValue = 0 #연산자 이후의 숫자를 받기 위해 초기화
str_value.set(str(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(str(disValue)) # 최종 결과 값 출력
disValue = 0
stoValue = 0
opPre = 0
else:
clear()
def button_click(value):
# print(value)
try:
value = int(value) #정수로 변환한다.
#정수가 아닌 경우 except가 발생하여 아래 except로 이동한다.
numClick(value) #정수인 경우 number_click( )를 호출
except:
operClick(value) #정수가 아닌 연산자인 경우 여기로온다.
win = tk.Tk()
win.title('계산시')
str_value = tk.StringVar()
str_value.set(str(disValue))
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', '=']]
for i, items in enumerate(calItem):
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()
12 + 36
12 * 36
12 - 36
12 / 36
clear
반응형
'Python' 카테고리의 다른 글
ImportError: DLL load failed while importing _arpack: 지정된 프로시저를 찾을 수 없습니다. (2) | 2022.10.06 |
---|---|
컴퓨터 카메라 출력 후 화면 캡쳐, 저장까지 해보기 (2) | 2022.07.21 |
마우스 클릭 입력받기 (0) | 2022.07.19 |
키보드 키 입력 받기 (0) | 2022.07.19 |
파이썬 셀리늄 크롤링 (0) | 2022.07.06 |