Appia의 IT세상

파이썬[Python] 034 tkinter 활용 계산기 만들기 2부 - 이벤트 구성 본문

Python/Python Tk (GUI)

파이썬[Python] 034 tkinter 활용 계산기 만들기 2부 - 이벤트 구성

Appia 2020. 1. 7. 18:54
반응형

이번 포스팅은 저번에 포스팅 했던 부분에 있어서 계산기 관련해서 이벤트를 연결하는 부분으로 포스팅을 구성했습니다. 물론, 이번 포스팅에서는 관련해서 파일 첨부도 진행 예정입니다. 물론, 받아 사용하시는 분들이 조금 더 생각하실 수 있게, 저의 코드는 한자리 수만 지원하도록 했습니다. 

 

크게 3가지 부분으로 이벤트를 정리 했습니다. 첫 번재는 C버튼을 이용하여, 초기화 하는 방법입니다. 다음 부분을 코드로 보면 다음과 같습니다. 

 

계산기 초기화 

다음 코드를 보면 다음과 같습니다. 여기에서, S_Var1는 계산기의 Entry부분을 표현하는 부분입니다. 

def ClearNum():
    global FC
    global V1
    V1 = None
    FC = None
    S_Var1.set("")

 

계산기 출력부 

숫자를 입력하면, 그 부분들은 Entry에 표현이 됩니다. 

def Insert_Val(t):
    S_Var1.set(int(t))

 

입력된 수 내부 저장

연산 버튼을 누르면, 입력된 값을 저장 하는 부분입니다. 

def AssignVa(S_Var1,Condition):
    global FC
    global V1
    if FC == None:
        V1 = S_Var1.get()
        FC = Condition

 

연산 부 및 출력부 

연산 하는 부분 과 결과를 출력하는 부분은 2가지 함수로 구성 됩니다. 다음 부분을 보겠습니다. 

def Reslut_S(V1,Condition):
    V2 = S_Var1.get()
    if Condition == "/" :
        S_Var1.set(str(int(V1)/ int(V2)))
    elif Condition == "*":
        S_Var1.set(str(int(V1) * int(V2)))
    elif Condition == "-":
        S_Var1.set(str(int(V1) - int(V2)))
    elif Condition == "+":
        S_Var1.set(str(int(V1) + int(V2)))

def Calculation(Condition):
    global FC
    if Condition == "/" :
        AssignVa(S_Var1, "/")
    elif Condition == "*":
        AssignVa(S_Var1, "*")
    elif Condition == "-":
        AssignVa(S_Var1, "-")
    elif Condition == "+":
        AssignVa(S_Var1, "+")
    elif Condition == "=":
        Reslut_S(V1, FC)
    else:
        pass

 

실제 연산 버튼을 누르면, 값이 저장되고, 이 저장된 값을 바탕으로 연산이 됩니다. 전체적인 코드를 살펴 보겠습니다. 

from tkinter import *

top = Tk()
V1 = None
FC = None

def ClearNum():
    global FC
    global V1
    V1 = None
    FC = None
    S_Var1.set("")

def Insert_Val(t):
    S_Var1.set(int(t))

def AssignVa(S_Var1,Condition):
    global FC
    global V1
    if FC == None:
        V1 = S_Var1.get()
        FC = Condition

def Reslut_S(V1,Condition):
    V2 = S_Var1.get()
    if Condition == "/" :
        S_Var1.set(str(int(V1)/ int(V2)))
    elif Condition == "*":
        S_Var1.set(str(int(V1) * int(V2)))
    elif Condition == "-":
        S_Var1.set(str(int(V1) - int(V2)))
    elif Condition == "+":
        S_Var1.set(str(int(V1) + int(V2)))

def Calculation(Condition):
    global FC
    if Condition == "/" :
        AssignVa(S_Var1, "/")
    elif Condition == "*":
        AssignVa(S_Var1, "*")
    elif Condition == "-":
        AssignVa(S_Var1, "-")
    elif Condition == "+":
        AssignVa(S_Var1, "+")
    elif Condition == "=":
        Reslut_S(V1, FC)
    else:
        pass

# 1번째 열
S_Var1 = StringVar()
E1 = Entry(top, bd = 4,textvariable = S_Var1)
E1.grid(row =0, column = 0, columnspan = 4)

# 2번째 열
numCLS = Button( text = "C", command = ClearNum, height = 2, width = 5)
numCLS.grid(row =1, column = 0)
numDiv = Button( text = "/", command = lambda :Calculation("/"), height = 2, width = 5)
numDiv.grid(row =1, column = 1)
numMux = Button( text = "*", command = lambda :Calculation("*"), height = 2, width = 5)
numMux.grid(row =1, column = 2)
numSub = Button( text = "-", command = lambda :Calculation("-"), height = 2, width = 5)
numSub.grid(row =1, column = 3)

# 3번째 열
num7 = Button( text = "7", command =  lambda:Insert_Val("7"), height = 2, width = 5)
num7.grid(row =2, column = 0)
num8 = Button( text = "8", command = lambda:Insert_Val("8"), height = 2, width = 5)
num8.grid(row =2, column = 1)
num9 = Button( text = "9", command = lambda:Insert_Val("9"), height = 2, width = 5)
num9.grid(row =2, column = 2)
numSum = Button( text = "+", command = lambda :Calculation("+"), height = 2, width = 5)
numSum.grid(row =2, column = 3)

# 4번째 열
num4 = Button( text = "4", command = lambda:Insert_Val("4"), height = 2, width = 5)
num4.grid(row =3, column = 0)
num5 = Button( text = "5", command = lambda:Insert_Val("5"), height = 2, width = 5)
num5.grid(row =3, column = 1)
num6 = Button( text = "6", command = lambda:Insert_Val("6"), height = 2, width = 5)
num6.grid(row =3, column = 2)
numRes = Button( text = "=", command = lambda:Calculation("="), height = 2, width = 5)
numRes.grid(row =3, column = 3)

# 5번째 열
num1 = Button( text = "1", command = lambda:Insert_Val("1"), height = 2, width = 5)
num1.grid(row =4, column = 0)
num2 = Button( text = "2", command = lambda:Insert_Val("2"), height = 2, width = 5)
num2.grid(row =4, column = 1)
num3 = Button( text = "3", command = lambda:Insert_Val("3"), height = 2, width = 5)
num3.grid(row =4, column = 2)
num0 = Button( text = "0", command = lambda:Insert_Val("0"), height = 2, width = 5)
num0.grid(row =4, column = 3)
top.mainloop()

 실행 해보시면, 한자리 수에 대한 연산이 가능합니다. 관련해서 파일을 다음과 같이 첨부하오니, 필요하신 분들은 다운로드 받아 활용하시길 바랍니다.

Calculator.py
0.00MB

혹 궁금하신거나, 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 

반응형
Comments