본문 바로가기

언어/PYTHON

[GUI / PYTHON] 1. PDF with Box ( 시작 // 완성 x )

 

PYQT란?

pyqt는 , qt가 가지고 있는 컴퓨터 그래픽 디자인을 각각의 요소에서 효과적인 일을 Python을 이용해서 GUI 프로그램을 만들 수 있는 일종의 프레임워크이다.

 

python에는 다양한 gui가 존재하는데 Tkinter, PySide등이 존재한다. 

 

그치만 pyqt는 qt designer이라는 프로그램이 있기 때문에 시각적으로 이쁘게 만들거나 꽤 간단하게 설계할 수 있다.

 

이런 pyqt에는 꽤 다양하게 파일을 구성한다.

 

크게는 3가지가 존재한다고 생각한다.

 

1. 기능

2. 시각

3. 작동

 

이런 PYQT를 사용하기 위해서는 파이썬 디버거에서의 터미널이나 가상환경 설정을 통해 pyqt를 설치를 한다.

 

pip install pyqt5

 

그럼 pyqt로 만들 준비가 완료된다. ( 그 밖에 다양한 tool과 사용 가능한 라이브러리들이 있는데 너무 많다. )

 

 

 

PYQT로 만든 PDF 이미지화 후에 샙션 구분화를 위한 박스 만들기

 

pyqt로 어떤 주제를 하나 정해서 만드는 것은 이번이 처음이었다.

 

그래서 하면서 깨달은 것들과 유용했던 라이브러리, 추후 기능 추가와 같은 내용을 담았다.

 

처음에 주어졌을 때는 당연히 어떤거 부터 해야할지 감이 안 잡힌다.

 

그래서 방황을 정말 한다고 시간을 쓴거 같다.

 

먼저 했던 것은 내가 만들려는 것과 유사한 것이 있는지 구글링과 github를 통해서 찾아봤다.

 

그리고 실행도 해보았고 유용한 것들이 있으면 인용과 사용을 했다.

 

그러고 꽤나 멍청하게 모든 코드를 복사해서 GPT에 원하는 것을 만들어달라고 부탁도 해보았다.

 

당연히 안된다. 그리고 그렇게 하면 늘지도 않는다.

 

그래도 3월말에 했던 대회가 기억이 나고 어떻게 해야할지 감이 잡혔다.

 

첫 번째로 ui를 구성을 하는게 맞고 거기서 필요한 ui의 라이브러리를 찾아 나갔다.

 

images와 ui는 github에 있는 것을 사용하고 거기서 내가 추가적인 action들을 추가했다.

 

 

그래서 내가 생각한 3가지 중 하나인 ui를 먼저 만들었다.

 

ui를 코딩한다기보다는 그냥 괜찮아보이는 코드를 사용하는 방식으로 했다.

 

 

 

ui 부분은 그래서 솔직히 하루 이틀 찾아가면서 넣으니깐 쉽게 진행이 되었다.

 

문제는 기능 문제였다.

 

가져온 ui에 이제 인코딩을 통해서 기능을 만들어가는 부분이다.

 

pdf를 이미지화 시키는 것.

 

그 안에서 내가 원하는 action을 통해 박스로 샙션을 구분해야한다.

 

 

박스 그리는 class

 

main창을 만들어 pdf이미지화 시키는 class

 

 

이렇게 main창에 ui를 연결시키고 connect를 통해 action을 취하는 곳에 기능을 연결해나갔다.

 

 

중간본

 

 

 

회고 및 추후 계획

 

메인창 안에서 또 다른 액션을 취할려하니 튕기거나 작동이 제대로 안되는 어려움을 겪었다.

 

pyqt는 멀티 프로세싱을 지원하지 않아, 한번에 원하는 동작을 같이 하고 싶으면 비동기식으로 바꾸는 방법과

 

멀티 스레드를 사용해서 하는 방법이 있다는걸 알게되며 사용하게 되었다.

 

pyqt에는 qthread를 통해서 멀티 스레드를 사용할 수 있다.

 

이것을 통해서 메인창에서 원하는 action들을 취할 수 있게 할 수 있게 되었다.

 

추후에 추가적인 기능은 지금은 pdf가 가지는 쪽마다 도형을 다르게 넣고 싶지만

 

pdf의 쪽을 넘겨도 도형은 그대로 남는다.

 

그래서 pdf 마다 다른 샙션이 존재하기 때문에 쪽마다 고정되는 기능을 추가적으로 해보는중이다.

 

또 그 나눈 샙션에 메모나 텍스트를 적을 수 있게 기능을 추가할 예정이다.