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()
실행 해보시면, 한자리 수에 대한 연산이 가능합니다. 관련해서 파일을 다음과 같이 첨부하오니, 필요하신 분들은 다운로드 받아 활용하시길 바랍니다.
혹 궁금하신거나, 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다.
반응형