반응형
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 라이브러리를 이용해 구현했고, 나머지는 가장 기본적으로 제공하는 기능을 이용해 만들었다.
작동 사진은 아래와 같다.
반응형
'공부 | Study > Python' 카테고리의 다른 글
#10 cannot import name 'QtWebEngineWidgets' 해결 방법 (0) | 2021.03.23 |
---|---|
#9 입력값이 숫자인지 글자인지 알려주는 함수 (0) | 2021.03.22 |
[Python GUI] #2 QT Designer를 이용해 계산기 UI 만들기 (0) | 2021.03.09 |
[Python GUI] #1 QT Designer 실행하기 (0) | 2021.03.08 |
#5 [Seoul OSD] Docstring (0) | 2020.08.03 |