파이썬_실전 프로젝트

객체지향 코드 - 계산기 step1

앞서 만든 계산기 코드를 객체 지향 코드로 바꿔보겠습니다.

객체지향이란 말은 범위가 넓긴 하지만, 일단 클래스 만들고, 함수 정의와 호출시, 변수 호출시 self. 식별자를 사용함으로써 간단하게나마, 구현해볼수는 있습니다. 객체지향은 규모가 커지고 분업화되는 프로젝트에 대비해서, 코드를 모듈화하고 재사용 함으로써 개발속도를 향상시키는 효과가 있습니다. 물론 그만큼 잘 사용해야겠지만요,

 

계산기 코드에서 변경할 부분은,

1. 클래스 생성

2. 클래스 내부에 __init__(self) 초기화 함수 생성

3. 클래스함수 호출, 클래스변수 호출시 이름 앞에 self. 식별자 붙여주기

4. 함수 내부 global로 변수된 선언 부분 삭제하고  self.식별자로 대체함.

 

# Step-1 => OOP rewriting

from tkinter import *
from tkinter import ttk

class Calculator:
    # 숫자버튼,AC버튼 처리
    def button_pressed(self, value):
        self.number_entry.insert("end",value)
        print(value,"pressed")
        
    # 연산 버튼 처리
    def math_button_pressed(self, value):
        print(value,"pressed")
        
    # 이퀄 버튼 처리
    def equal_button_pressed(self):
        print("equal pressed")
        
    #초기화
    def __init__(self, root):
        root.title("Calculator")
        root.geometry("300x200")  # 화면폭에 맞춰서 늘려줌.

        self.entry_value = StringVar(root, value='')

        self.number_entry = ttk.Entry(root, textvariable = self.entry_value, width=20)
        self.number_entry.grid(row=0, columnspan=3) 


        self.button7 = ttk.Button(root, text="7", command = lambda:self.button_pressed('7'))
        self.button7.grid(row=1, column=0)
        self.button8 = ttk.Button(root, text="8", command = lambda:self.button_pressed('8'))
        self.button8.grid(row=1, column=1)
        self.button9 = ttk.Button(root, text="9", command = lambda:self.button_pressed('9'))
        self.button9.grid(row=1, column=2)
        
        # 나누기 버튼 -> math_button_pressed() 로 연결.
        self.button_div = ttk.Button(root, text="/", command = lambda:self.math_button_pressed('/'))
        self.button_div.grid(row=1, column=3)

        self.button4 = ttk.Button(root, text="4", command = lambda:self.button_pressed('4'))
        self.button4.grid(row=2, column=0)
        self.button5 = ttk.Button(root, text="5", command = lambda:self.button_pressed('5'))
        self.button5.grid(row=2, column=1)
        self.button6 = ttk.Button(root, text="6", command = lambda:self.button_pressed('6'))
        self.button6.grid(row=2, column=2)
        
        # 곱하기 버튼 -> math_button_pressed() 로 연결.
        self.button_mult = ttk.Button(root, text="*", command = lambda:self.math_button_pressed('*'))
        self.button_mult.grid(row=2, column=3)

        self.button1 = ttk.Button(root, text="1", command = lambda:self.button_pressed('1'))
        self.button1.grid(row=3, column=0)
        self.button2 = ttk.Button(root, text="2", command = lambda:self.button_pressed('2'))
        self.button2.grid(row=3, column=1)
        self.button3 = ttk.Button(root, text="3", command = lambda:self.button_pressed('3'))
        self.button3.grid(row=3, column=2)
        
        #더하기 버튼 -> math_button_pressed() 로 연결.
        self.button_add = ttk.Button(root, text="+", command = lambda:self.math_button_pressed('+'))
        self.button_add.grid(row=3, column=3)

        #마지막줄 AC,0,=,- 버튼추가
        # -버튼 -> math_button_pressed() 로 연결.
        # AC,0 버튼 -> button_pressed() 로 연결
        # = 버튼 -> equal_button_pressed() 로 연결
        self.button_ac = ttk.Button(root, text="AC", command = lambda:self.button_pressed('AC'))
        self.button_ac.grid(row=4, column=0)
        self.button0 = ttk.Button(root, text="0", command = lambda:self.button_pressed('0'))
        self.button0.grid(row=4, column=1)
        self.button_equal = ttk.Button(root, text="=", command = lambda:self.equal_button_pressed())
        self.button_equal.grid(row=4, column=2)
        self.button_sub = ttk.Button(root, text="-", command = lambda:self.math_button_pressed('-'))
        self.button_sub.grid(row=4, column=3)

    root = Tk()
    calc = Calculator(root)
    root.mainloop()

 

댓글

댓글 본문
작성자
비밀번호
버전 관리
code builder
현재 버전
선택 버전
graphittie 자세히 보기