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