본문 바로가기
Python

Python PyQt5 프로젝트 - Excel / CSV 파일 데이터 그래프 그리기 (1)

by 아짱이아빠 2022. 9. 23. 18:42
반응형

파이썬 PyQt5를 이용하여 Excel 파일과 CSV 파일을 선택하여 불러오고 파일 안의 데이터를 다양한 그래프로 그려주는 프로그램을 만들어 본다.

불러온 파일은 자동으로 컬럼의 이름을 확인하여 표시해주고 그래프로 표현하고자 하는 컬럼의 데이터를 클릭하면 그래프로 그려주며 그래프는 여러 종류의 스타일을 선택할 수 있다. 

이 프로젝트를 통해서 파이썬을 이용한 GUI 프로그램을 만드는 아주 기본적인 과정을 정리해보고자 한다.

 

완성된 프로그램 결과는 아래와 같다. 

Excel / CSV 파일 데이터를 그래프로 생성해 주는 프로그램 결과
(Excel / CSV 파일 데이터를 그래프로 생성해 주는 프로그램 결과)

 

이 프로젝트에서는 QT Designer를 사용하지 않았지만 1부에서는 QT Designer에 대해서 간단히 그 역할과 기능을 정리해 보았다.

본격적인 코딩은 2부에서 정리하도록 하겠다.

 

[PyQt5 소개]

Qt는 플랫폼에 관계없어 다양한 기능을 포함하는 C++ 라이브러리이자 개발툴이다.

PyQt5는 Qt5 애플리케이션 프레임워크에 대한 파이썬 버전이며 1000여 개의 클래스들을 포함하는 파이썬 모듈의 모음이다.

PyQt5는 아나콘다에 포함되어 있으므로 아나콘다를 설치했다면 PyQt5를 사용할 수 있다.

만약, 아나콘다를 설치하지 않았다면 pip 인스톨을 통해 설치할 수 있다.

아나콘다 설치나 pip 인스톨 설치 방법은 인터넷상에 많이 나와있으므로 참고하면 된다.

 

이 프로젝트에서는 QT Designer를 사용하지 않았으나, 처음 이 프로젝트의 GUI를 QT Designer를 이용하려 했기 때문에 그때 공부한 내용을 1부에 정리하였다. 

QT Designer를 이용하면 내가 원하는 프로그램의 GUI를 좀 더 쉽게 구성할 수 있다.

하지만 이후 기능을 추가하고 프로그램을 유지하는 데에 있어서 조금 어렵고 복잡한 부분이 있을 수 있다는 점을 참고하면 좋을 것 같다.

 

[Qt Designer 기초]

Qt Designer는 그래픽 기반으로 쉽고 직관적으로 GUI를 구성할 수 있도록 해주는 도구이다.

Qt Designer는 설치된 폴더에서 “designer.exe”를 실행하거나 또는 Anaconda Prompt를 실행하고 VScode를 사용한다면 터미널 창에서 “designer” 명령어를 통해 실행시킬 수 있다.

QT designer 실행 후 첫 화면
(QT designer 실행 후 첫 화면)

 

Qt designer를 실행시킨 후 디폴트로 선택되어 있는 ‘Main Window’를 생성한다.

생성된 Main Window는 아래의 그림과 같으며 여기서 아주 기본적으로 이 창의 이름을 바꾸거나 크기를 조절할 수 있다.

크기는 마우스를 이용해 쉽게 바꿀 수도 있고 특정한 값으로 입력하여 바꿀 수도 있다.

Main Window 생성과 이름, 크기 조절 기능
(Main Window 생성과 이름, 크기 조절 기능)

 

또 한 가지 기능을 보면 Main Window에 왼쪽 하단에 마우스를 이동하면 특정 문자를 띄울 수 있는데, 이 기능은 오른쪽 상단에 있는 객체 탐색기에서 ‘statusbar’를 선택 후 아래의 속성 중 ‘statusTip’에 특정 문자를 입력하면 된다.

statusTip 기능 설정
(statusTip 기능 설정)

 

[메뉴 생성]

다음은 Main Window에 메뉴를 생성하는 방법이다.

Main Window 왼쪽 상단에 있는 ‘여기에 입력하십시오’(한글 버전 기준) 란에 첫 번째 원하는 메뉴 이름을 넣고 엔터를 누르면 그다음 하위에 들어가는 메뉴 이름을 넣을 수 있다.

그리고 하위 메뉴에 더 하위의 메뉴는 아래의 그림처럼 옆의 아이콘을 클릭해서 만들어 나갈 수 있다.

Main Window 메뉴 만들기
(Main Window 메뉴 만들기)

 

메뉴나 Main Window에 원하는 아이콘을 넣을 수도 있다.

넣고자 하는 메뉴를 클릭하고 오른쪽에 있는 ‘icon’ 기능에서 아래 방향의 화살표를 누르고 저장되어 있는 아이콘 파일을 선택할 수 있다. 

선택하면 아래의 그림과 같이 메뉴 옆에 아이콘이 보인다.

Main Window에도 아이콘을 넣을 수 있으며 먼저 Main Window를 클릭하고 오른쪽의 ‘windowIcon’에서 동일하게 아이콘을 불러올 수 있다.

메뉴에 icon 넣기
(메뉴에 icon 넣기)

 

(메뉴에 기능 할당하기)

먼저 Main Window를 닫고 나가는 기능을 연결해보겠다.

이는 생성했던 메뉴 중 Exit를 누름으로써 실행되도록 한다.

File의 Exit를 클릭하고 오른쪽 아래에 있는 ‘시그널/슬롯 편집기’에서 + 를 눌러 기능 추가를 위한 준비를 한다.

아래의 그림과 같이 ‘송신자/시그널/수신자/슬롯’에 각각의 명령을 선택한다.

의미는 기능의 이름에서 짐작할 수 있듯이 Exit를 누르는 행위로 Main Window가 받아 창을 닫는다는 내용이다.

Main Window를 닫는 기능 할당하기
(Main Window를 닫는 기능 할당하기)

할당된 기능이 동작하는지 확인해야 한다.

이제까지 만든 내용은 ‘Ctrl + r’을 눌러 미리 실행해 볼 수 있다.

 

이제 다른 기능도 추가로 할당해 보겠다.

먼저 ‘View’ 메뉴를 추가하고 하위에 ‘Maximize’와 ‘Normal’을 만든다.

그리고 앞에서와 같이 하나씩 메뉴를 클릭하고 ‘시그널/슬롯 편집기’에서 아래의 그림과 같이 기능을 정의한다.

화면 Maximize와 Normal 기능 할당하기
(화면 Maximize와 Normal 기능 할당하기)

 

역시 ‘Ctrl + r’을 통해 정상 동작하는지 확인해 본다.

 

 

(메뉴에 단축키 할당하기)

각 메뉴 동작에 단축키를 할당해 보겠다.

이는 ‘동작 편집기’를 통해 할 수 있으며 만약 QT designer 창에 보이지 않는다면 ‘보기’ 탭에서 불러올 수 있다.

‘동작 편집기’의 단축키 칸이 비워져 있을 텐데 이 빈칸을 더블 클릭하여 창을 띄운 후 단축키에 원하는 단축키 조합을 입력하면 된다.

여기서 주의할 점은 기존에 이미 설정되어 있는 단축키와 겹치지 않게 해야 한다는 것이다.

아래의 그림과 같이 설정을 하고 난 후 미리 보기를 통해 기능 동작 여부를 확인해 본다.

메뉴에 단축키 기능 설정하기
(메뉴에 단축키 기능 설정하기)

 

(Tab Widget 넣기)

메뉴를 구성하는 것은 대략 알아봤으며 이제 Tab Widget을 넣어 보고 여기에 각종 버튼과 다이얼 등을 넣어 보겠다.

먼저 왼쪽의 ‘Container’에서 ‘Tab Widget’을 마우스로 끌어다가 Main Window에 놓고 크기를 적당히 조절한다.

디폴트로 Tab 1과 Tab 2가 있는데 이 이름을 변경하려면 아래의 그림처럼 오른쪽 상단의 ‘QTabWidget’을 누르고 아래의 칸에서 ‘currentTabText’에 각 tab의 이름을 바꿔주면 된다.

Tab Widget 추가 및 Tab 이름 변경하기
(Tab Widget 추가 및 Tab 이름 변경하기)

 

여기에 하나의 tab을 더 생성해 보겠다.

Main Window에서 마우스 우클릭을 하여 ‘쪽 삽입’을 누르고 ‘현재 쪽 다음에’를 누르면 하나의 동일 레벨 tab이 생긴다.

tab의 이름은 앞에서 설명한 것과 동일하게 수정할 수 있다.

 

각 tab의 이름을 Buttons와 Dials, Sliders로 변경하고 각각에 버튼들과 다이얼, 슬라이더를 왼쪽에서 드래그하여 각 tab에 위치시켜 보고 ‘Ctrl + r’을 통해 미리 실행해서 확인해 본다.

 

반응형

 

(파이썬 파일로의 변환)

마지막으로 QT Designer에서 생성한 ui 파일을 파이썬 파일로 변환하는 것에 대해 알아보겠다.

QT Designer에서 이제까지 생성한 것을 저장하면 ui 파일로 저장된다. 

이 ui 파일은 커맨드 창을 띄어 아래의 명령어를 통해 파이썬 파일로 변환할 수 있다.

pyuic5 -x untitled.ui -o main.py

여기서 ‘untitled’와 ‘main’에는 각각 ui 파일명과 변경하려는 파이썬 파일명을 넣으면 된다.

그리고 “python main.py”를 커맨드 창에 입력하여 프로그램을 실행시킬 수 있다.

 

파이썬 파일로 변경하고 파일을 열어보면 아래와 같이 이제껏 구현한 내용이 파이썬 코드로 변환되어 있는 것을 확인할 수 있다.

 

ui 파일을 파이썬 파일로 변환된 모습
(ui 파일을 파이썬 파일로 변환된 모습)

 

파이썬 파일로 변환하고 코드를 추가하거나 변경하여 GUI를 수정할 수 있으며 특정 알고리즘을 추가할 수 있게 된다.

 

여기에서 알아본 ui 파일을 파이썬 코드로 변환하는 방법도 있고 파이썬 코드에서 해당 ui 파일을 연결시켜 불러오는 방법도 있다.

ui 파일을 파이썬 코드로 변경하는 것은 ui 파일이 바뀔 때마다 계속 변환을 해줘야 한다는 것과 자동으로 구현된 코드가 꽤 복잡하여 기능을 추가하거나 수정이 쉽지 않다는 단점이 있다.

반면에 ui 파일을 로드하여 프로그래밍을 하는 경우에는 QT Designer로 ui 파일을 수정하더라도 파이썬 코드에 대한 영향성을 최소화할 수 있다.

ui 파일을 로드하는 것은 다음의 코드로 수행한다.

import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
form_class = uic.loadUiType("UI 파일 경로 및 파일명")[0]

class MyWindow(QMainWindow, form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    myWindow = MyWindow()
    myWindow.show()
    app.exec_()

 

코드를 실행하면 동일하게 QT Designer에서 만든 프로그램이 실행되는 것을 확인할 수 있다.

동일한 프로그램을 실행하는데 앞에서 ui 파일을 파이썬 파일로 변환하여 생성된 코드와 비교해보면 상당히 간단하다는 것을 알 수 있다.

물론 여기서 각 버튼과 다이얼 등에 기능을 할당하려면 점점 복잡해진다.

 

여기까지 QT Designer의 기초와 ui 파일을 파이썬 파일로 변환하는 것에 대해 알아봤다.

 

서두에서 얘기했듯이 이 프로젝트에서는 QT Designer를 사용하지 않고 파이썬 코드로만 작성하였다.  

다음 2부에서 본격적으로 Excel 파일과 CSV 파일을 불러오고 내부의 데이터를 그래프로 표현하는 프로그램의 파이썬 코드에 대해 알아보겠다. 



반응형

댓글