묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
파이썬으로 정리한 엑셀 파일을 pyqt5이용한 gui에 열수있나요?
안녕하세요 제목 그대로입니다ㅠㅠ 파이썬으로 정리한 내용을 엑셀로 저장하고 싶은데최종목표는 pyqt5를 사용해서 gui로 정보를 가공하여 페이지처럼 만들고 싶어요 근데 gui에서 엑셀을 만드는 것은 가능한 것 같은데 gui에서 아예 엑셀이 열리는 방법이 없는 것 같아요... 혹시 방법이 있나요? 이게 되는 게 맞나요
-
미해결
PyQt5로 계산기 만드는 프로그램 작성 중 구문 오류가 떴는데 무엇이 잘못된 건지 모르겠습니다.
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_())