GUI 계산기 만들기 과제

python 으로 GUI 계산기를 만들어 보았습니다. ( 2 + 2 = 4 )



Tkinter

  • Tcl/Tk에 대한 파이썬 Wrapper로서 Tcl/Tk를 파이썬에 사용할 수 있도록 한 Lightweight GUI 모듈
    - Tcl : Tool Command Language
    - Tk : 크로스 플랫폼에 사용되는 일종의 GUI 툴킷

  • Tkinter 의 mainloop()
    - 여러 모듈에서 위젯을 생성하고, 트리거를 설정하고 난 뒤 실행흐름 마지막에 user의 입력을계속 기다리게 하는 목적으로 사용
    (계속 기다리지 않으면 한 번만 실행되고 꺼짐)
    (지속적으로 UI를 유지하기 위해서 필요함)
    (단순히 코드 마지막이 아니라 프로그램 흐름 마지막단에 위치해야 함)



계산기 만들기 코드

import tkinter as tk            # python 표준인터페이스 tkinter

disValue = 0
operator = {'+':1, '-':2, '/':3, '*':4, 'C':5, '=':6}
stoValue = 0
opPre = 0                       # 현재값, 연산자, 저장된 값, 이전 연산자

def number_click(value):
    # print('숫자',value)
    global disValue
    disValue = (disValue*10) + value
    str_value.set(disValue)     # 화면에 숫자 나타냄

def clear():
    global disValue, stoValue, opPre
    disValue = 0                # 주요 변수 초기화
    stoValue = 0    
    opPre = 0
    str_value.set(str(disValue))  # 화면 지움.


def operator_click(value):
    # print('명령', value)
    global disValue, operator, stoValue, opPre
    op = operator[value]      # value의 값에 따라 연산자를 숫자로 변경(+ -> 1)
    if op == 5:  # C
        clear()
    elif disValue == 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(str(disValue))   # 최종 결과값 출력
        disValue = 0
        stoValue = 0
        opPre = 0
    else:
        clear()




def button_click(value):
    # print(value)
    try:
        value = int(value)      # 정수로 변환 
        number_click(value)		# 정수인 경우 number_click( )를 호출
    except:
        operator_click(value)	# 정수가 아닌 경우 operator_click() 호출
       



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

str_value = tk.StringVar()
str_value.set(str(disValue))
dis = tk.Entry(win, textvariable=str_value, justify = 'right', bg = 'pink', fg = 'red')
dis.grid(column = 0, row = 0, columnspan = 4, ipadx = 140, ipady = 30)

callItem = [['1','2','3','4'],
            ['5','6','7','8'],
            ['9', '0', '+', '-'],
            ['/', '*', 'C', '=']]

for i, items in enumerate(callItem):
    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 = 'black',
             fg=color,
             command = lambda cmd=item: button_click(cmd)
             )
        bt.grid(column=k, row = i + 1)



# btn = tk.Button(win, text='1', width = 10, height = 5)
# btn.grid(column = 0, row = 1)
# 하나씩 표현하는 방뻡




win.mainloop()

출처 : https://www.codingnow.co.kr/python/

좋은 웹페이지 즐겨찾기