-
카테고리
-
해결 여부
미해결
PyQt5로 계산기 만드는 프로그램 작성 중 구문 오류가 떴는데 무엇이 잘못된 건지 모르겠습니다.
21.06.13 01:09 작성 조회수 124
0
PyQt5를 활용하여 계산기 만드는 프로그램을 작성 중에 SyntaxError: unexpected EOF while parsing 라는 에러 메시지가 떴습니다. 인터넷에 찾아보니 괄호나 철자가 틀렸을 경우 종종 뜨는 오류라고 하는데 어디가 잘못되었는지 전혀 모르겠습니다. QtDesigner에서 시그널/슬롯 편집은 따로 하지 않았고 객체들은 파이썬 파일에서 connect를 활용하여 모두 연동하였습니다.
파이썬에서 작성한 코드와 QtDesigner를 이용하여 작성한 내용은 다음과 같습니다. 혹시 제 코드 중 어디가 잘못되었는지 알려주실 수 있나요?
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QInputDialog, QMessageBox
from PyQt5 import uic
from abc import ABCMeta, abstractmethod
from math import pi
class Shape(metaclass=ABCMeta):
@abstractmethod
def cal_area(self):
pass
class Rectangle(Shape):
def cal_area(self, str_data):
width, height = tuple(map(float, str_data.split()))
cal_result = width*height
return cal_result
class Circle(Shape):
def cal_area(self, str_data):
radius = float(str_data)
cal_result = pi*radius*radius
return cal_result
class Triangle(Shape):
def cal_area(self, str_data):
width, height = tuple(map(float, str_data.split()))
cal_result = 0.5*width*height
return cal_result
class MyWin(QMainWindow):
def __init__(self):
super().__init__()
self.ui = uic.loadUi('cal.ui', self)
btn_list = [self.ui.btn0, self.ui.btn00, self.ui.btn1, self.ui.btn2, self.ui.btn3,\
self.ui.btn4, self.ui.btn5, self.ui.btn6, self.ui.btn7, self.ui.btn8, self.ui.btn9,\
self.ui.btnDiv, self.ui.btnLbrac, self.ui.btnMul, self.ui.btnPer, self.ui.btnPlus,\
self.ui.btnRbrac, self.ui.btnSqrt, self.ui.btnSub]
for i in btn_list:
i.clicked.connect(lambda button = i:self.write_edit(button))
self.ui.btnBack.clicked.connect(self.backDelete)
self.ui.btnC.clicked.connect(self.all_clear)
self.ui.btnEqual.clicked.connect(self.calculate(self.ui.edit.text()))
self.ui.actioninfo.triggered.connect(self.show_info)
self.ui.actionexit.triggered.connect(self.close)
self.ui.actionintro.triggered.connect(self.show_intro)
shape_list = [self.ui.actionRectangle, self.ui.actionCircle, self.ui.actionTriangle]
for i in shape_list:
i.triggered.connect(lambda action = i:self.cal_area_message(action))
def show_info(self):
QMessageBox.about(self, '작성자', 'a')
def show_intro(self):
QMessageBox.about(self, '자기소개', 'a입니다.')
def write_edit(self, button):
if button.text() == 'X':
exp = '*'
else:
exp = button.text()
self.ui.edit.setText(self.ui.edit.text() + exp)
def backDelete(self):
b = list(self.ui.edit.text())
b.pop()
c = ('').join(b)
self.ui.edit.setText(c)
def all_clear(self):
self.ui.edit.setText('')
def calculate(self, str_data):
result = str(eval(str_data))
self.ui.edit.setText(result)
def cal_area_message(self, action):
values, ok = QInputDialog.getText(self, 'Shape parameter', 'Input Parameter')
if ok and values:
if action == self.ui.actionRectangle:
area = Rectangle().cal_area(values)
elif action == self.ui.actionCircle:
area = Circle().cal_area(values)
elif action == self.ui.actionTriangle:
area = Triangle().cal_area(values)
self.ui.edit.setText(str(area))
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MyWin()
win.show()
sys.exit(app.exec_())
답변을 작성해보세요.
답변 0