[PyQt5] 계산기로 계산기 만들기(1)

최지원·2021년 10월 11일
4


2021년 10월 11일, 한글날 대체공휴일을 맞이하여 새로운 과제가 등록되었다.
과제는 Python3, PyQt5를 이용하여 계산기 구현하기!

컴퓨터라는 똑똑이 계산기로 기능도 몇 없는 멍충이 계산기를 만들 생각을 하니 벌써부터 설렌다.


기본적으로 주어진 .py 파일에는 계산기의 기본 레이아웃이 완성되어 있었다.

To do List

  • 버튼이 눌러지면 창에 입력되는 기능 구현하기
  • 연산 기능 실행 버튼의 계산기능 구현 하기
  • 전체 지우기 버튼의 지우기 기능 구현하기
  • UI 구성 코드의 개선

그 중에서도 4번째 "UI 구성 코드의 개선"에서 버튼 생성 코드 반복 줄이기를 첫 번째 목표로 잡았다.


기존 코드

# Digit Buttons

self.digitButton[0] = Button('0')
self.digitButton[1] = Button('1')
self.digitButton[2] = Button('2')
self.digitButton[3] = Button('3')
self.digitButton[4] = Button('4')
self.digitButton[5] = Button('5')
self.digitButton[6] = Button('6')
self.digitButton[7] = Button('7')
self.digitButton[8] = Button('8')
self.digitButton[9] = Button('9')

# . and = Buttons
self.decButton = Button('.')
self.eqButton = Button('=')

# Operator Buttons
self.mulButton = Button('*')
self.divButton = Button('/')
self.addButton = Button('+')
self.subButton = Button('-')

# Parentheses Buttons
self.lparButton = Button('(')
self.rparButton = Button(')')

# Clear Button
self.clearButton = Button('C')

개선 코드

# Digit Buttons
self.digitButton = [x for x in range(0, 10)]

for i in range(10):  # for문을 이용하여 Digit Buttons 생성코드 축약
    str_i = str(i)
    self.digitButton[i] = Button(str_i)

# Sign Buttons
signs = ['.', '=', '*', '/', '+', '-', '(', ')', 'C']
self.signButton = [x for x in range(0, 9)]

for j in range(9):
    self.signButton[j] = Button(signs[j])

계산기에서 숫자(0~9)를 입력하는 버튼은 'Digit Buttons'로 묶은 뒤, 기본 파일에서 주어진 '. and = Buttons', 'Operator Buttons', 'Parenthese Buttons', 'Clear Button'들을 Sign Buttons이라는 하나의 묶음으로 다시 바꿔주었다.

필요한 버튼의 개수를 고려하여 빈 리스트를 만들어준 뒤, for문과 sings라는 리스트를 이용하여 전체적인 코드의 줄 수를 줄여주었다.

하지만 이전 코드와 달리 각 버튼이 수행하는 기능이 명확하게 구별되지 않기 때문에 아래에 주석을 추가로 다는 것으로 이를 보완하였다.


주석 예시_일부

numLayout.addWidget(self.signButton[0], 3, 1) # decButton ('.')
numLayout.addWidget(self.signButton[1], 3, 2) # eqButton ('=')

이것으로 버튼 생성 코드의 반복을 간소화시켰으니 다음은 버튼이 눌러지면 창에 입력되는 기능을 구현해보려고 한다 :)

profile
KMU Software 21

0개의 댓글