티스토리 뷰

반응형

youtu.be/rqif36EDSOI

모든 강의 자료 : www.codingnow.co.kr/

파이썬 기본 문법을 활용한 GUI 계산기를 만들어 볼겁니다.

 

 

파이썬으로 만든 GUI 계산기

파이썬에는  GUI를 제작하는 방법이 몇가지 있는데요.

여기서는 tkinter(Tk interface)를 사용합니다. tkinter는 파이썬 표준 인터페이스 입니다.

이것은 import를 하여 사용합니다.

import tkinter as tk

이후에 몇줄만으로 GUI가 생성됩니다.

import tkinter as tk

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

단 4줄 만으로 MFC와 같은 다이얼로그 창이 생성되었습니다.

공식 문서 링크입니다.

docs.python.org/ko/3/library/tkinter.html

 

tkinter — Tcl/Tk 파이썬 인터페이스 — Python 3.9.1 문서

tkinter — Tcl/Tk 파이썬 인터페이스 소스 코드: Lib/tkinter/__init__.py tkinter 패키지(《Tk 인터페이스》)는 Tk GUI 툴킷에 대한 표준 파이썬 인터페이스입니다. Tk와 tkinter는 대부분의 유닉스 플랫폼과 윈

docs.python.org

이것을 바탕으로 다음과 같이 소스코드를 작성하였습니다.

자세한 코드 설명은 동영상을 참고해주세요.

소스코드
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
    
    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(str(disValue)) #화면을 지운다.

### + ~ = 연산자를 클릭했을때
def oprator_click(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로 이동한다.
        number_click(value)     #정수인 경우 number_click( )를 호출
    except:
        oprator_click(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()
반응형