일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Android
- pandas
- 깃
- office
- 안드로이드
- 파이썬
- 문자열
- pythongui
- 비주얼베이직
- Excel
- python3
- 엑셀
- python
- win32com
- 파워포인트
- 파이썬3
- windows
- VBA
- git
- Windows11
- html
- pyqt5
- Outlook
- 윈도우10
- 아웃룩
- Windows10
- 윈도우11
- 오피스
- matlab
- 파이썬GUI
Archives
Appia의 IT세상
파이썬[Python] 034 tkinter 활용 계산기 만들기 2부 - 이벤트 구성 본문
반응형
이번 포스팅은 저번에 포스팅 했던 부분에 있어서 계산기 관련해서 이벤트를 연결하는 부분으로 포스팅을 구성했습니다. 물론, 이번 포스팅에서는 관련해서 파일 첨부도 진행 예정입니다. 물론, 받아 사용하시는 분들이 조금 더 생각하실 수 있게, 저의 코드는 한자리 수만 지원하도록 했습니다.
크게 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()
실행 해보시면, 한자리 수에 대한 연산이 가능합니다. 관련해서 파일을 다음과 같이 첨부하오니, 필요하신 분들은 다운로드 받아 활용하시길 바랍니다.
혹 궁금하신거나, 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다.
반응형
'Python > Python Tk (GUI)' 카테고리의 다른 글
파이썬[Python] tkinter 활용 - 파일 불러와서 텍스트 에디터 출력하기(filedialog,text) (26) | 2020.05.25 |
---|---|
파이썬[Python] 033 tkinter 활용 계산기 만들기 1부 - GUI 구성 (0) | 2020.01.07 |
파이썬[Python] 030 tkinter 활용 Filedialog(Open, Save, Directory) (2) | 2020.01.04 |
파이썬[Python] 029 tkinter 기본강의 009 tkMessagebox 및 tkinter에 대한 생각 (0) | 2020.01.04 |
파이썬[Python] 028 tkinter 기본강의 008 Text, Spinbox (0) | 2020.01.03 |
Comments