📱 [파이썬] 간단한 계산기 (+, -, *, /)
ChatGPT를 참고하여 만든 Tkinter 계산기 입니다.
▫️ 덧셈, 뺄셈, 곱셈, 나눗셈
▫️ 입력 값 표시 줄
📦 파이썬 코드
import tkinter as tk
먼저 Python에서 GUI를 생성기능을 제공하는 tkinter 모듈을 가져옵니다.
class Calculator:
def __init__(self, master):
self.master = master
master.title("계산기")
다음으로 계산기의 로직이 포함된 Calculator 클래스를 정의합니다.
__init__ 메서드에서 계산기의 부모 창인 마스터를 매개변수로 전달합니다.
창 제목은 "계산기"로 설정합니다.
self.total = tk.DoubleVar()
self.total.set(0)
self.entered_number = tk.StringVar()
self.entered_number.set("")
계산된 결과 값과 입력 값을(숫자) 각각 저장하기 위한 두 개의 tkinter 변수, self.total과 self.entered_number를 생성합니다.
self.total은 0으로, self.entered_number는 빈 문자열로 초기화합니다.
self.total_label = tk.Label(master, textvariable=self.total)
self.total_label.grid(row=0, column=0, columnspan=4, padx=10, pady=10, ipadx=10, ipady=10)
self.entry = tk.Entry(master, textvariable=self.entered_number)
self.entry.grid(row=1, column=0, columnspan=4, padx=10, pady=10, ipadx=10, ipady=10)
위에 코드는 계산된 값과 입력 값을 각각 표시하는 tkinter 레이블과 입력 위젯을 생성합니다.
텍스트 변수 옵션은 각각 self.total 및 self.entered_number로 설정되어 해당 값을 표시합니다.
마지막 줄에 그리드 메서드는 상위 창에서 위젯의 위치를 지정하는 데 사용됩니다.
def create_buttons(self):
tk.Button(self.master, text="1", command=lambda: self.button_click(1)).grid(row=2, column=0)
tk.Button(self.master, text="2", command=lambda: self.button_click(2)).grid(row=2, column=1)
tk.Button(self.master, text="3", command=lambda: self.button_click(3)).grid(row=2, column=2)
tk.Button(self.master, text="+", command=lambda: self.button_click("+")).grid(row=2, column=3)
tk.Button(self.master, text="4", command=lambda: self.button_click(4)).grid(row=3, column=0)
tk.Button(self.master, text="5", command=lambda: self.button_click(5)).grid(row=3, column=1)
tk.Button(self.master, text="6", command=lambda: self.button_click(6)).grid(row=3, column=2)
tk.Button(self.master, text="-", command=lambda: self.button_click("-")).grid(row=3, column=3)
tk.Button(self.master, text="7", command=lambda: self.button_click(7)).grid(row=4, column=0)
tk.Button(self.master, text="8", command=lambda: self.button_click(8)).grid(row=4, column=1)
tk.Button(self.master, text="9", command=lambda: self.button_click(9)).grid(row=4, column=2)
tk.Button(self.master, text="*", command=lambda: self.button_click("*")).grid(row=4, column=3)
tk.Button(self.master, text="C", command=lambda: self.button_clear()).grid(row=5, column=0)
tk.Button(self.master, text="0", command=lambda: self.button_click(0)).grid(row=5, column=1)
tk.Button(self.master, text="=", command=lambda: self.button_equal()).grid(row=5, column=2)
tk.Button(self.master, text="/", command=lambda: self.button_click("/")).grid(row=5, column=3)
create_buttons 메서드는 계산기용 버튼을 생성합니다.
각 버튼에 대해 텍스트 레이블과 버튼을 클릭할 때 호출할 함수를 지정하는 명령 옵션을 전달합니다.
def button_click(self, number):
current = self.entered_number.get()
self.entered_number.set(current + str(number))
def button_clear(self):
self.entered_number.set("")
button_click 메서드는 입력된 숫자 값을 받아 self.entered_number의 현재 값에 더합니다.
button_clear 메서드는 self.entered_number의 값을 빈 문자열로 설정하여 입력값을 지워줍니다.
def button_equal(self):
current = self.entered_number.get()
self.entered_number.set("")
try:
self.total.set(eval(current))
except:
self.total.set("Error")
button_equal 메서드는 eval 함수를 사용하여 self.entered_number의 현재 값을 확인하고 그 결과를 self.total의 값으로 설정합니다.
식에서 오류가 확인될 경우 이 함수는 self.total 값을 "Error"로 설정합니다.
if __name__ == "__main__":
root = tk.Tk()
my_gui = Calculator(root)
root.mainloop()
이 코드는 계산기 클래스의 인스턴스를 생성하고 루트 창을 부모로 전달한 다음 root.mainloop()를 사용하여 메인 이벤트 루프를 시작합니다.
📦 파이썬 코드(전체)
import tkinter as tk
class Calculator:
def __init__(self, master):
self.master = master
master.title("계산기")
self.total = tk.DoubleVar()
self.total.set(0)
self.entered_number = tk.StringVar()
self.entered_number.set("")
self.total_label = tk.Label(master, textvariable=self.total)
self.total_label.grid(row=0, column=0, columnspan=4, padx=10, pady=10, ipadx=10, ipady=10)
self.entry = tk.Entry(master, textvariable=self.entered_number)
self.entry.grid(row=1, column=0, columnspan=4, padx=10, pady=10, ipadx=10, ipady=10)
self.create_buttons()
def create_buttons(self):
tk.Button(self.master, text="1", command=lambda: self.button_click(1), width=2, height=1).grid(row=2, column=0)
tk.Button(self.master, text="2", command=lambda: self.button_click(2), width=2, height=1).grid(row=2, column=1)
tk.Button(self.master, text="3", command=lambda: self.button_click(3), width=2, height=1).grid(row=2, column=2)
tk.Button(self.master, text="+", command=lambda: self.button_click("+"), width=2, height=1).grid(row=2, column=3)
tk.Button(self.master, text="4", command=lambda: self.button_click(4), width=2, height=1).grid(row=3, column=0)
tk.Button(self.master, text="5", command=lambda: self.button_click(5), width=2, height=1).grid(row=3, column=1)
tk.Button(self.master, text="6", command=lambda: self.button_click(6), width=2, height=1).grid(row=3, column=2)
tk.Button(self.master, text="-", command=lambda: self.button_click("-"), width=2, height=1).grid(row=3, column=3)
tk.Button(self.master, text="7", command=lambda: self.button_click(7), width=2, height=1).grid(row=4, column=0)
tk.Button(self.master, text="8", command=lambda: self.button_click(8), width=2, height=1).grid(row=4, column=1)
tk.Button(self.master, text="9", command=lambda: self.button_click(9), width=2, height=1).grid(row=4, column=2)
tk.Button(self.master, text="*", command=lambda: self.button_click("*"), width=2, height=1).grid(row=4, column=3)
tk.Button(self.master, text="C", command=lambda: self.button_clear(), width=2, height=1).grid(row=5, column=0)
tk.Button(self.master, text="0", command=lambda: self.button_click(0), width=2, height=1).grid(row=5, column=1)
tk.Button(self.master, text="=", command=lambda: self.button_equal(), width=2, height=1).grid(row=5, column=2)
tk.Button(self.master, text="/", command=lambda: self.button_click("/"), width=2, height=1).grid(row=5, column=3)
def button_click(self, number):
self.entered_number.set(self.entered_number.get() + str(number))
def button_clear(self):
self.entered_number.set("")
self.total.set(0)
def button_equal(self):
try:
self.total.set(eval(self.entered_number.get()))
except:
self.total.set("error")
root = tk.Tk()
root.geometry("185x240")
calc = Calculator(root)
root.mainloop()
'플그래밍 > 파이써언' 카테고리의 다른 글
[파이썬] 내가 공부하려고 만든 Tkinter 투토리얼 (0) | 2023.02.18 |
---|---|
[파이썬] Pandas 기초 (0) | 2023.02.10 |
[파이썬] 간단한 텍스트 에디터 (열기, 조회, 수정, 저장) (0) | 2023.02.10 |
[파이썬 기초] 너무 쉬운 IndexError (0) | 2022.12.19 |
[파이썬 기초] 너무 쉬운 ModuleNotFoundError (0) | 2022.12.19 |