< 설치 (windows10 os, python3, anaconda설치 기준) >
1. conda prompt 열어서 'pip3 install PyQt5' 라고 입력하면 설치가 시작된다.
2. Qt designer를 실행한다. Qt designer는 C++로 생각하자면 MFC라고 보면 되고, MatLab의 guide라고 생각하면 된다. 보통은 PyQt가 설치된 site-pakages에 있지만 그냥 검색으로 찾는게 편하므로 설치된 폴더쯤 가서 "designer.exe"로 검색해서 설치 파일을 찾자.
3. qt designer.exe를 실행해서 원하는 GUI를 만든다. (만들때 사용되는 몇가지 툴은 따로 설명)
4. 다 완성한 후 이름을 apple 로 저장하면 'apple.ui' 파일이 형성된다.
< ui → py >
실제 사용 및 코드 편집을 위해서 ui 확장자 파일을 py 확장자로 바꿔준다.
PyQt5에는 pyuic5 라는 패키지를 담고 있어서 cmd(커맨드) 창에서 쉽게 바꿀수 있다.
ui 파일이 있는 곳에서 그림과 같이 입력해 준다.
'pyuic5 -x re_id.ui -o temp_ui.py' 여기서 -x는 입력부로써 re_id.ui 라는 파일을 입력으로 받고, -o는 출력 부로써 temp_ui.py 라는 파일을 출력으로 만들어 냄을 의미한다.
실행 시키면 'temp_ui.py'라는 파일이 만들어지며, 내부에는 Qt desinger로 만들었던 GUI를 구성하는 실제 python code들이 작성되어 있다.
<자주 쓰는 tool 설명>
그림을 예시로 자주쓰는 tool 이 어떤 형태로 나타나는지 표현
의외로 이름과 아이콘이 헷갈려서 사용할 때 혼란 스러웠다.
- Push botton (붉은색) : 클릭하는 형태로 되어 있고 보통 클릭하면 어떤 함수가 실행된다든지 파일을 고를수 있는 팝업창이 뜬다던지 하는 형태로 사용하는 그냥 아이콘만 등록 시켜 놓으면 클릭했을때 명령 수행이 되지 않는다. 이때는 클릭시 액션을 수행하도록 connet를 작성해야 한다.
그림 예시의 버튼은 총 4줄로 되어있지만, Qt designer에서 버튼을 추가하고 py로 바꾸면 마지막 줄인 clicked.connect는 없다.
4번째 줄 코드는 Btn_searching이라고 이름이 부여된 버튼을 누르면 bottonClicked_searching 이라는 함수가 실행됨을 의미한다.
따라서 저 버튼을 누르면 정의된 bottonClincked_searching 함수 내부가 실행된다.
- Spin Box, Double Spin Box(녹색) : 원하는 값을 입력으로 넣어주는 창이다. 위아래 삼각형을 눌러서 증분을 시킬수도 있고 직접 타이핑도 가능하다. 처음에 아무런 값을 지정하지 않으면 빈칸으로 되는데 이때 초기값도 지정 가능하다. 보통 프로그램에서는 자체적으로 입력 가능한 최소값가 최대값이 있기 마련인데 오류를 줄이기 위해서 정의할 수 있다. 만약 초기값, 최소, 최대값을 미리 Qt designer에서 지정하지 않으면 해당 코드가 없는데 py 형태에서 추가해주어도 된다.
이 예시에서 아이콘의 이름을 spinBox_batchsize로 주어서 만들었고 spinBox에 입력된 초기값은 32 이며 최소값은 1, 최대값은 256으로 정의된다. 그리고 값은 value라는 이름으로 가지고 있다.
입력을 받는 값을 사용 할 때에는
그림 처럼 spinBox_batchsize.value 로 사용하면 된다. spinBox_batchsize에 value이름으로 정의된 변수가 값이 들어가기 때문이다.
- Label(파랑) : GUI 내 단순히 text를 삽입할때 사용한다. label 끼리 묶어서 하나의 정리된 큰 틀로 사용가능하다. Qt designer의 메뉴 아래 아이콘 중에 수직, 수평 배치를 이용하면 된다.
- Text Browser(주황색) : 배열에 정리된 값이나 string등을 표출할때 사용한다. 한줄 한줄 아래쪽에 이어서 작성 할때(즉, 표출하는 text를 엔터를 쳐서 내리고 싶은 경우)는 append를 사용한다.
실제로 값을 받을때는 string 형태만 입력으로 받으므로 array 형태의 값은 np.array2string 등을 통해서 string으로 변환 한 후 넣어준다.
- Graphics View(보라색) : image를 보여준다. Qt designer로 만들면 image를 표출하는 부분만 생성(위치값, 이름)되고 실제 image와의 연결 부분은 작성되지 않는다. 따라서 pixelmap을 만들어 주는 부분이 필요하다.
그림에서 보면 표출하는 부분과 실제 사용할 image 부분이 다르다. GUI 표출을 위한 부분은 QGraphicsScene()로 정의된 scene를 이용하고, 실제로 수정하고 사용할 image는 cv.imread로 받아와서 처리한다.
예시에서 Graphics View 아이콘의 이름은 graphicsView_target_image로 하였다.