본문 바로가기

공부 | Study/Python

#8 [프로그래밍2] PyQt를 이용해 GUI 계산기 만들기

반응형

2021.03.09 - [공부 | Study/Python] - [Python GUI] #2 QT Designer를 이용해 계산기 UI 만들기

 

Qt Designer를 이용해 계산기 UI를 짜는 법은 위 링크를 참고하면 좋다. 

 

가장 간단한 사칙연산 계산기이지만 재미를 위해 아래와 같은 몇 가지 기능을 추가했다.

(1) 연산 속도 표시

(2) 값 지우기 기능 추가

(3) 전체 지우기 기능 추가

(4) 최근 계산 기록 표시

 

import sys
import math
import time
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5 import uic

ui_form = uic.loadUiType("cal.ui")[0]



class QtCalculator(QMainWindow,ui_form):
    def __init__(self):
        super(QtCalculator, self).__init__()
        self.setupUi(self)

        self.comboBox.addItem('  +  ')
        self.comboBox.addItem('  -  ')
        self.comboBox.addItem('  /  ')
        self.comboBox.addItem('  X  ')

        self.button.clicked.connect(self.button_click)
        self.button_2.clicked.connect(self.button_2_click)
        self.button_3.clicked.connect(self.button_3_click)



    def button_click(self):
        start = time.time()
        try:
            num1 = int(self.num1.toPlainText())
            num2 = int(self.num2.toPlainText())
            sign = self.comboBox.currentText()


            if sign == '  +  ':
                fin = num1 + num2
            elif sign == '  -  ':
                fin = num1 - num2
            elif sign == '  /  ':
                fin = num1 / num2
            elif sign == '  X  ':
                fin = num1 * num2

            self.fin.setText(str(fin))
            self.history_1.setText("가장 최근 계산 기록")
            self.history_2.setText(str(fin))

        except:
            self.fin.setText("ERROR")
            pass
        end = time.time()
        self.time_taken.setText(str((end - start) ))
        self.time_taken_2.setText("소요됨")

    def button_2_click(self):
        self.num1.clear()
        self.num2.clear()
        self.fin.clear()

    def button_3_click(self):
        self.num1.clear()
        self.num2.clear()
        self.fin.clear()
        self.history_1.setText("")
        self.history_2.setText("")
        self.time_taken.setText("")
        self.time_taken_2.setText("")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    myWindow = QtCalculator()
    myWindow.show()
    app.exec_()

연산 속도는 time 라이브러리를 이용해 구현했고, 나머지는 가장 기본적으로 제공하는 기능을 이용해 만들었다. 

작동 사진은 아래와 같다.

반응형