PyQt5로 계산기 만드는 프로그램 작성 중 구문 오류가 떴는데 무엇이 잘못된 건지 모르겠습니다.

21.06.13 01:09 작성 조회수 124

0

PyQt5를 활용하여 계산기 만드는 프로그램을 작성 중에 SyntaxError: unexpected EOF while parsing 라는 에러 메시지가 떴습니다. 인터넷에 찾아보니 괄호나 철자가 틀렸을 경우 종종 뜨는 오류라고 하는데 어디가 잘못되었는지 전혀 모르겠습니다. QtDesigner에서 시그널/슬롯 편집은 따로 하지 않았고 객체들은 파이썬 파일에서 connect를 활용하여 모두 연동하였습니다.

파이썬에서 작성한 코드와 QtDesigner를 이용하여 작성한 내용은 다음과 같습니다. 혹시 제 코드 중 어디가 잘못되었는지 알려주실 수 있나요? 

import sys
from PyQt5.QtWidgets import QMainWindowQApplicationQInputDialogQMessageBox
from PyQt5 import uic
from abc import ABCMetaabstractmethod
from math import pi

class Shape(metaclass=ABCMeta):
    @abstractmethod
    def cal_area(self):
        pass

class Rectangle(Shape):
    def cal_area(selfstr_data):
        widthheight = tuple(map(floatstr_data.split()))
        cal_result = width*height
        return cal_result

class Circle(Shape):
    def cal_area(selfstr_data):
        radius = float(str_data)
        cal_result = pi*radius*radius
        return cal_result

class Triangle(Shape):
    def cal_area(selfstr_data):
        widthheight = tuple(map(floatstr_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(selfbutton):
        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(selfstr_data):
        result = str(eval(str_data))
        self.ui.edit.setText(result)

    def cal_area_message(selfaction):
        valuesok = 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

답변을 작성해보세요.

답변을 기다리고 있는 질문이에요.
첫번째 답변을 남겨보세요!