앞서 우리가 만든 클래스를 다음과 같이 불러다 쓸 수 있을 것으로 생각했습니다.
from 053_excelCompLib4 import StaticFormExcelCompare
그런데 틀렸습니다.
숫자로 시작하는 함수는 import 할 때, 오류가 발생합니다. 방법이 아얘 없는 것 같지는 않습니다만 복잡하게 할 필요가 없습니다. 그래서 053_excelCompLib4를 복사해서 excelCompLib4.py로 만들어 놓고 맨 아래의 테스트 코드를 약간 수정했습니다.
excelCompLib4.py
if __name__ == "__main__":
a = StaticFormExcelCompare()
a.setColor('123456', '789ABC','DEF123')
a.setFiles(r".\files\income_state_org.xlsx",
r".\files\income_state_new.xlsx",
r".\files\income_state_comp2.xlsx")
if a.run():
print("파일 비교 완료")
else:
print("파일 비교 에러")
여기에 if문을 넣은 이유는 excelCompLib4.py를 테스트 할 때는 이 코드들이 실행이 되도록 하고 다른 코드에서 import를 했을 때는 이 코드가 실행되지 않도록 하기 위함입니다. 이미 “GUI를 가진 프로그램” 편에서 살펴본 바 있는데요. 이 파일 자체를 실행할 때에만 __name__에 __main__이 들어가게 되기 때문입니다.
이렇게 excelCompLIb4.py의 내용을 수정한 후에 이를 import해서 사용합니다.
049_excelComp4.py에서 엑셀 파일 비교에 대한 GUI만을 만들었습니다. 그 코드에서 우리가 만든 excelCompLib4를 import해서 고정포맷 엑셀 파일 비교를 다음과 같이 연결을 합니다.
054_excelComp5.py
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QFileDialog,\
QMessageBox
from excelComp import Ui_Dialog
from excelCompLib4 import StaticFormExcelCompare
고정포맷 엑셀 파일 비교하는 StaticFormExcelCompare 클래스를 excelCompLib4.py 파일로 부터 import를 합니다. 여기서 excelCompLib4.py의 파일명 앞에 숫자가 들어가면 에러가 발생해서 파일의 이름을 변경해서 사용하고 있습니다.
def pbExecClick(self):
if len(self.leOri.text()) < 5 \
or len(self.leComp.text()) < 5 or \
len(self.leOut.text()) < 5:
self.showMsgBox( "에러",
"파일 입력 오류",
"파일이 모두 선택되거나 입력되지 않았습니다.",
QMessageBox.Warning,
QMessageBox.Ok | QMessageBox.Cancel,
QMessageBox.Ok)
return
if self.rbKey.isChecked():
print("구분코드 엑셀 비교 실행")
else:
a = StaticFormExcelCompare()
a.setColor('123456', '789ABC', 'DEF123')
a.setFiles(self.leOri.text(), self.leComp.text(), self.leOut.text())
if a.run():
self.showMsgBox( "완료",
"파일 비교 완료",
f"파일 비교가 정상적으로 완료되었습니다.\n” \
“{self.leOut.text()}",
QMessageBox.Information,
QMessageBox.Ok,
QMessageBox.Ok)
print("파일 비교 완료")
else:
self.showMsgBox( "Error",
"파일 비교 에러",
f"파일 비교가 비정상적으로 종료되었습니다.\n” \
“{self.leOut.text()}",
QMessageBox.Critical,
QMessageBox.Ok,
QMessageBox.Ok)
print("파일 비교 에러")
기존 코드 대비 변경된 부분은 if self.rbKey.isChecked() 조건 문에서 else 이하의 부분입니다. 기존 코드와 다른 부분은 두 가지가 있습니다. setFiles() 함수에 파일명을 GUI에서 Line Edit 위젯의 텍스트를 읽어와 매개변수로 넣고 있습니다. 그리고 기존에 “파일 비교 완료”와 “파일 비교 에러”에 해당하는 부분은 메시지 박스를 통해서 사용자에게 알림을 주는 방식으로 변경이 되었습니다.
이렇게 우리가 만든 클래스와 GUI 프로그램이 합쳐졌습니다.
'IT' 카테고리의 다른 글
그록3(GROQ-3): 초고속 AI 칩의 등장과 미래 (0) | 2025.02.18 |
---|---|
파이썬 - 구분코드 엑셀 비교 (0) | 2025.02.04 |
파이썬 - 배포를 위한 클래스 만들기 (0) | 2025.02.04 |
파이썬 - 고정 포맷 엑셀 비교 (0) | 2025.02.03 |
파이썬 - 입력값 확인, 엑셀 비교 프로젝트 (0) | 2025.02.03 |
댓글