파이썬(Python)/DIY 미니 ERP 만들기

DIY 미니 ERP 만들기 - (2) PyQt5에 관하여 part.2

JJ Goh[Certified customs broker] 2021. 5. 12. 16:33

QtDesigner 개략

 

  지난 포스팅에서 PyQt5 설치까지 해보았는데요. 이제 site-packages > QtDesigner 폴더에 담겨져 있는 designer.exe 파일을 찾아 실행해 보도록 하겠습니다.

 

 실행해 보시면 아래와 같은 화면을 접하시게 되는데요.

 새 폼을 생성함에 있어 마법사로서 간편하게 생성을 도와줄 창이 팝업됩니다. 해당 창을 이용해 QtDesigner가 제공해 주는 기본 template을 써서 새 폼 생성이 가능하며, 원치 않으신다면 그냥 닫으시면 됩니다. 또한, 한번 작업을 시작한 프로젝트는 해당 파일을 열어볼 일이 자주 생기게 되는데요. 이런 경우 '최근 항목'을 사용해서 작업을 원하시는 프로젝트의 파일명을 선택하셔서 바로 열기도 가능합니다. 

 

 일단, 제 기존 작업물 중 하나인 ExportPlot 프로젝트를 열어보겠습니다.

 

회사별 수출실적 리포트 JG data center - ExportPlot

 우선 ExportPlot부터 간략히 소개드리면, 저의 통관서비스를 이용할 고객사에게 주단위 또는 월단위로 희망하는 주기에 따라, 수출실적에 기반하여 각종 회계경영상의 지표를 시각화하여 빠르게 제공하고자 작성된 리포트 자동생성 프로그램입니다. 

 

 제가 기업체에 근무할 당시 주업무 중 하나가 수출입 실적의 정리와 보고에 있었습니다. 일종의 모니터링을 한다는 목적에서 윗선에서는 늘 수출실적이나 수입실적을 궁금해 하였고, 회계부서, 구매부서나 영업부서에서는 필요한 영업자료를 만들거나 회계상의 정리 또는 소싱전략 수립을 위해서 그 달의 수출입실적이 어떠한지에 대한 자료요구가 있었고 결국에는 주기적인 자료 제공 요청을 협의해 오기도 했습니다.

 

 

 자료정리라면 우리 직장인들이 애용하는 MS 엑셀을 통해서도 충분히 만들어 나갈 수 있지만 여기에는 일정의 한계가 있습니다.

 

 첫째, 엑셀함수는 때때로 에러를 일으킵니다. 특히, 다루어야할 field라인이 크게 증가하면 처리속도가 매우 느려질 뿐만 아니라, 경우에 따라서는 파일이 깨지기도 합니다.

 

 둘째, 해당 업무를 담당하는 직원이 변경되거나 하면 자료통계기준이 잘 정리되어 있지 않은 경우 갑자기 통계값이 다른 기준에 의해 집계되기 시작합니다. 즉, 통계의 연속성과 신뢰성이 사라집니다.

 

 셋째, 담당직원 입장에서도 매우 소모적인 작업이 진행됩니다. 해당 통계를 맡은 직원은 주기적으로 해당 통계를 내기 위해 데이터 전처리부터 그래프 작성까지 소모성의 단순업무를 주기적으로 반복해야 합니다.

안그래도 바쁜 현업을 제치고 소모성 작업을 하다 실수라도 하면 데이터가 엉뚱하게 통계되기도 합니다.

 

 넷째, 주기적 통계작성을 위한 기본데이터를 주기적으로 데이터 출처(수출입관리업무의 경우 관세사무소)에 제공요청하여야 합니다. 데이터출처가 능동적으로 대응해 주지 않는 이상은 소모적 연락이 수반됩니다.

 

 여하튼 해보면 좀 많이 귀찮고, 에러도 잘 나고 지속성을 확보하기도 어렵고 통계의 신뢰성에도 의문이 가는 상황들이 수시로 발생되게 됩니다. 아마 비슷한 업무를 하고 계신 분들이라면 무슨 의미인지 충분히 느끼시리라 생각됩니다. 

 

 해서 통관서비스를 제공함에 있어 고객사에 더 의미 있는 서비스 가치를 전달하기 위해 이 부분을 프로그래밍해서 아예 고객사에서 통계를 위한 raw data 제공요청에 대응하는 것을 넘어 통계작업까지 일괄처리하여 리포트를 제공하고자 만들게 된 것이 수출부문에서는 ExportPlot입니다.

 

 기존 해당 기업의 담당직원이 짧으면 하루, 길면 일주일도 더 걸려 하는 작업들이 이 프로그래밍으로 실행 한번에 10초 내로 시각화결과물이 도출됩니다.

 

 집계의 기준은 언제나 동일하며, pandas를 사용하기 때문에 데이터가 아무리 방대하여도 MS 엑셀은 따라잡을 수 없는 처리속도로 에러 없이 데이터를 가공하게 됩니다. 언제든지 고객사에서 원하시는 때에 요구하시면 1분내로 결과리포트를 제공받으실 수 있는 환경을 구축해 놓았습니다.

 

 제 통관서비스의 경우 고객사별로 관심 있어 하시는 통계값이라던가 리포트의 템플릿이라던가 하는 점들이 모두 다를 수 있기에 언제든지 이 포맷은 customizing이 가능하도록 구현해 드리는데요. 관심 있으신 수출입기업 담당자님들께서는 서비스 계약 관련 연락 주시면 성심껏 상담 드리도록 하겠습니다. ^^

 

  당사 서비스 홍보는 여기까지만 하고요 ... ^^...    위의 첫번째 이미지와 같이 QtDesigner에서 작성해 둔 GUI폼은 파이썬의 연산을 수행하는 코드를 담은 class로 연동되어 그 결과물을 사람이 인식하기 좋은 형태로 표출해 줍니다. 그 결과물이 위의 이미지인 것입니다.

 

 따라서, 우리는 QtDesigner를 통해 main 프로그래밍 코드들에 의한 연산결과값을 어떻게 표출할 것인가 또는 main 프로그래밍 코드를 돌리기 위해 입력 받아야 하는 값들을 어떻게 사용자로부터 입력 받을 것인가에 대한 템플릿의 시각적 디자인을 할 수 있게 됩니다. 

 

 

 QtDesigner는 GUI를 만들기 위한 GUI기반 툴이라고 요약할 수 있겠습니다.

 

 안드로이드스튜디오를 써보신 분들이라면 안드로이드스튜디오로 하던 디자인 작업과 아주 유사하다는 것을 느끼실 수 있으실텐데요. 해서 안드로이드스튜디오를 써보신 분들은 훨씬 빠른 속도로 적응하시고 아주 잘 다루실 수 있으시리라 생각됩니다. 

 

  QtDesigner 살펴보기

 QtDesigner의 전부를 속속들이 알면 좋겠지만 IT 개발자로 완전히 전업하고 있는 것이 아닌 저처럼 타분야 사업자나 직장인분들이 필요에 의해 프로그램을 개발 중이시라면 완벽하게 모든 기능을 알아야 할 필요는 없을 것 같습니다. 저도 제게 필요한 부분만 구글링해서 작동방식의 개략만을 이해한 후 ExportPlot 프로젝트를 완성하였는데도 아무 문제 없이 잘 돌아가기 때문입니다.  

 

 현업 때문에 시간도 없는데, QtDesigner를 모두 알더라도 그 기능들을 다 써먹을만한 프로그램을 만들 일은 그다지 없을 것이기에 현실론에 입각하여 아래의 개념 정도만 알고 가는 것으로 하고자 합니다.

 

 1. 메뉴 - 보기 설정

 

 

 우선 메뉴바에 있는 보기 설정부터 보시면 위젯상자, 객체탐색기, 속성편집기 등등이 있습니다. 필요한 편집기를 클릭하시면 체크가 들어가면서 편집화면에 해당 편집기가 표출됩니다.

 

 이 중 위젯상자, 객체 탐색기와 속성 편집기 그리고 시그널/슬롯 편집기가 집중적으로 사용되게 되므로, 4개 편집기 정도는 체크를 넣어두시고 적당한 위치에 배치하여 사용하시기를 권장 드립니다. 

 

 2. 객체 탐색기

 객체 탐색기는 편집창에 추가한 각종의 객체들을 클릭시 그 이름과 클래스간 종속관계 등을 파악하는데 사용됩니다.

객체탐색기

 QMainWindow 클래스에 의해 생성된 MainWindow 객체 아래에 QGridLayout 클래스에 의해 생성된 gridLayout_4라는 이름을 가진 레이아웃 객체가 있고 다시 그 아래에 QLabel 클래스의 객체인 label_17 등등 라벨 객체가 있는 것을 알 수 있습니다. 

 

 이 탐색기를 통해 편집을 희망하는 객체가 어느 위치에 존재하고 어떤 레이아웃 객체에 종속되어 있는지를 파악하여 디자인상 객체의 배치를 고려하는데 사용됩니다.

 

 

 3. 위젯 상자

 위젯상자는 Qt5를 통해 생성할 수 있는 GUI 클래스들을 편집화면에 간편하게 드래그앤드롭 방식으로 추가하는데 사용됩니다.

 

 

위젯상자

 Qt5 코드체계를 코딩화면에 일일이 적는 것이 아닌, 위젯 화면상의 객체들을 단순히 끌어다 편집화면에 놓음으로서 해당 코드가 추가되도록 해주는 것이며, 모든 편집이 끝나 완성된 ui파일을 열어보시면 위젯으로 추가한 객체들이 모두 Qt5의 코드체계에 근거해 C언어 또는 Python 언어로 컴파일이 된 것을 확인하실 수 있습니다. 

 

 이 위젯 상자를 통해 우리는 디자인에 필요한 GUI들을 템플릿에 추가하게 됩니다.

 

 4. 속성편집기

 속성편집기는 위젯상자를 통해 추가된 객체별 속성(Attribute)값을 변경하는데 사용됩니다.

 

label_8 객체에 대하 속성편집기 화면

예를 들어, Qlabel 객체를 추가하였다면 이 객체의 가로, 세로 크기 조정이라던가, Default로 표시되는 Text 와 같은 속성값을 수정하도록 해줍니다. 특히, view 기반의 객체인 경우라면 font 색상이나 굵기 같은 내용을 변경할 필요가 많이 때문에 속성편집기를 더욱 자주 사용하게 됩니다.

 

 5. 시그널/슬롯 편집기

 시그널/슬롯 편집기는 편집화면에 추가된 객체가 사용자로부터 입력을 받아 정해진 동작을 수행할 수 있도록 main 프로그래밍과 연결과정을 편집해 줍니다. 예를 들어, Qbutton 객체가 추가되었을 경우, 사용자는 해당 버튼을 눌렀을 때 프로그램이 오늘의 날짜를 표시해 주는 동작을 시키고자 할 수 있습니다. 이럴 경우 해당 Qbutton 객체를 click하는 동작을 시그널로 하고, main 코드에 아래와 같은 함수를 정의해 둔 후 해당 시그널이 발생되면 아래 함수를 구동하도록 하는 동작을 연결해 주는 것입니다.

 

def calDate():
    z = datetime.today()
    print(z)

 

시그널 : buttonClicked()

슬롯 :  calDate()

 

 시그널 즉, 사용자가 어떤 특정된 동작의 신호를 보내면 시그널을 받아 작동하도록 슬롯으로 정의된 함수가 연결되어 사용자가 원하는 동작을 수행할 수 있게 되는 것입니다.

 해당 시그널과 슬롯은 직접 편집하는 방법도 있지만, 시그널/슬롯 편집기를 사용하면 ui파일을 py파일로 전환하는 과정에서 코드가 자동으로 삽입되기 때문에 더욱 쉽게 프로그램 완성이 가능합니다.

 

 

 4개의 편집기 용도를 대략적으로 살펴 보았는데요. 다음 포스팅에서는 해당 편집기 사용예 몇가지와 사용상의 유의점 등을 올려 보겠습니다.

 

 감사합니다.

 

 

 

NPU(엔피유) 관세사무소

대표관세사 고장주

Tel) 031-986-7190

E-mail) sales@npucus.com

[NPU관세사무소 프로모션 페이지] https://www.tradenpu.com/npu_cus/

[무역비지니스 인텔리전스 서비스 | TradeNPU] https://www.tradenpu.com

[파이썬 실용 예제. 무역과 공공데이터] https://pdatinmylife.tistory.com

Certified Customs Broker JangJu Goh

Executive Customs Broker @ NPU Customs Consulting

CEO @ JG TradePlus

sales@npucus.com

Trade Compliance / Customs clearance management at foreign company

Working experience of Air export freight forwarding

Data Visualization / Independent development of business automation application – copyright of JGPO_Manager, JG Data Center, AutoCC and etc.

B2B consignment & direct export/import, B2C Overseas Buying Office consulting

Alibaba.com B2B trade / taobao B2C trade / Amazon.com global selling etc. Online trade regulation consulting.

Import license / Quarantine

English communication available

[TradeNPU for partnership proposal - JGTP] https://www.tradenpu.com/jgtp/

반응형