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
'Python' 카테고리의 다른 글
6. 파이썬 - list(리스트), tuple(튜플), dict(딕셔너리), set (0) | 2022.09.05 |
---|---|
5. 파이썬 - integer(int), boolean(bool), float, string(str) (0) | 2022.09.05 |
4. 파이썬 - 변수 선언, (숫자형, 문자열 (자료형)) (0) | 2022.09.05 |
3. 파이썬 기억력 테스트 게임 (0) | 2022.08.22 |
2. 파이썬 오락실 게임 만들기 (0) | 2022.08.19 |
댓글