본문 바로가기
▶ Project_Python/◾ PyQt5 & Qt_Designer

Qt Designer와 파이썬 코드를 연결할 때 준비할 기본 내용.

by ★→←★ 2021. 10. 15.
반응형

Qt Designer를 이용해 프로그램의 인터페이스를 꾸몄다면, 이제 기능을 구현하기 위한 코딩을 진행해야 합니다. 만약 파이썬 코딩이 없이 Qt Designer를 이용해 만들어진 파일을 저장하면, 단순히 ui파일만 남게 되며 별도의 프로그램 실행은 이루어지지 않습니다. 따라서, 프로그램의 최종 완성은 파이썬을 이용한 코딩이라 할 수 있습니다.

 

단순하게 연결하고, 기능을 구현한다고 생각하면 좋습니다. 다른 글에서도 언급했듯, 레이아웃을 이용해 위치를 잡고, 적절히 버튼 및 뷰어를 배치한 후, 시그널/슬롯을 설정하면 Qt Designer에서의 작업은 마무리라 할 수 있습니다. 결국 다음과 같은 과정으로 디자인 작업을 마무리할 수 있습니다.

 

  1. 레이아웃으로 각 메뉴(위젯)들의 위치 잡기
  2. 각 구성에 알맞은 버튼, 뷰어 배치하기
  3. 시그널/슬롯을 설정하고 파일 저장하기

 

이렇게 구성된 파일은 지정된 폴더에 ui 확장자로 저장되게 됩니다. 이 파일을 파이썬으로 불러와 적절하게 구동될 수 있도록 연결하고, 기능을 만들어주면 되는 것이죠. 결국, '시작'과 '결과'를 보여주는 것이 프로그램의 완성이라는 느낌이기도 합니다. (개인적인 생각이겠죠.)

 

 

✔ QtDesigner의 ui파일과 파이썬 연결하기 위한 준비.

앞선 글에서 언급한 바 있는 내용입니다. 파이썬에서 ui를 배치하고 생성하는 것은 코딩으로 할 수 있습니다. 모든 위치와 크기 및 기능을 하나씩 코드로 지정해주면 되는 것이죠. pyqt5를 이용한다면 충분히 가능한 이야기입니다.

 

다만, 상당히 노련한 실력이 필요할 수 있습니다. 결국은 노력의 문제가 될 것이지만 저와 같은 초보자에게는 쉽지 않은 과정이 될 수 있습니다. 개인적으로 QtDesigner를 이용한 후, 세부적인 내용은 코딩을 통해 수정하실 것을 추천합니다.

 

 

QtDesigner 첫걸음, 가장 먼저 숙지해야할 부분

호기롭게 프로그램을 만들기를 도전하다 보면 예상치 못한 부분에서 헷갈리는 내용들이 발생하곤 합니다. 전문적인 교육을 받는다면 관련된 내용의 분류가 원활할 수 있지만, 그렇지 않은 경우

senseplus.xyz

 

✔ QtDesigner의 ui파일을 불러오는 방법의 선택.

해당 내용은 결과적으로 어떻게 코딩을 완성해갈지에 대한 선택적인 부분이라 할 수 있습니다. ui파일 자체를 py파일로 변환한 후 활용하는 방법이 있습니다. 다음으로는 ui파일을 따로 둔 채, 불러와 필요한 부분을 코딩으로 완성하는 방법이 있습니다.

 

단순하게 생각해도 후자가 편리할 수 있다는 것을 알 수 있습니다. 그렇다고 장점만 있는 것은 아닙니다. 후자의 경우 프로그램 인터페이스의 수정을 위해서는 QtDesigner 프로그램을 통해야 한다는 불편함이 존재합니다. 물론, ui파일을 열어 일부 수정할 수 있지만, 그정도 실력이라면 앞서 있었던 고민은 큰 의미가 없겠죠.

 

저와 같은 초보에게는 후자의 방법(ui를 불어와 코딩을 완료)을 추천드리며, 필요에 따라 ui파일을 QtDesigner로 오픈하여 사용하면 될 것 같습니다. 그 후, 많은 부분에 익숙해졌다면 하드코딩을 진행해보는 것도 앞으로의 개발자로써 실력을 쌓는 좋은 경험이 될 수 있지 않을까 생각합니다.

 

우선은 부담스럽기 때문에 QtDesigner를 이용하겠습니다. 

 

✔ 파이썬 에디터에서의 준비

파이썬 에디터를 이용해 코딩을 진행하기 위해서는 다양한 라이브러리들을 'import'해야 합니다. 그래야만 원하는 기능을 보다 편리하게 사용할 수 있기 때문이죠. 하지만, 모든 코드와 알고리즘을 직접 작성하여 활용해도 상관은 없습니다. 단지, 오랜 시간과 스트레스가 동반될 수 있습니다.

 

즉, QtDesigner로 만든 ui파일 불러오고, 외관을 띄우고, 구현한 기능을 테스트하기 위해서는 적절한 라이브러리를 import 해야 합니다. 기본적인 서식은 미리 준비해두면 도움이 될 수 있겠죠. 여러 프로그램을 구상하고 있다면 말입니다.

 

import sys 
from PyQt5 import uic 
from PyQt5.QtWidgets import QApplication, QMainWindow

form_class = uic.loadUiType("main_window.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_()

 

 

위 코드는 기본적으로 main_window.ui파일을 불러와 띄워주는 전체 코드입니다. 가볍게 4가지 영역으로 나눠서 살펴볼 수 있겠죠. 라이브러리르 불러오는 부분, ui파일을 가져오는 부분, 프로그램 기능을 구현하는 부분, 코드의 사직을 통해 메인 윈도를 띄우는 부분입니다.

 

 

① 필요한 라이브러리 불러오기

from PyQt5 import uic 
from PyQt5.QtWidgets import QApplication, QMainWindow

PyQt5에서 필요로하는 부분, ui 로드하기, QtWidgets 기능 부분으로 구분할 수 있습니다. 대부분의 메뉴는 위젯으로 활용할 수 있습니다.

 

 

② ui파일 가져오기

form_class = uic.loadUiType("main_window.ui")[0]

위 코드는 단순하게 메인윈도우ui파일을 가져오는 코드로 생각하면 되겠습니다. "main_window.ui"는 ui파일의 경로를 지정해야 하는 부분입니다.

 

 

③ 프로그램 기능을 구현하는 부분

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

class로 구분되어 있는 위 코드의 하위에 함수를 만들어 버튼 및 뷰어의 기능을 구현할 수 있습니다. 당연히 사용자지정 슬롯을 생성하여 해당 슬롯의 이름으로 함수를 구성하셔야 합니다. 또한, 슬롯이 지정되어 있는데, 코드가 없다면 에러가 발생할 수 있습니다. 이경우, pass를 이용해 자리를 마련해두는 것으로 테스트를 진행해볼 수 있습니다.

 

 

④ 프로그램 코드의 사직, 윈도우 띄우기 부분

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

위 코드는 해당 프로그램 코드의 처음 실행 시 진행되는 부분입니다. 다시 말해, 스크립트를 실행하면 가장 먼저 실행되는 영역이라고 할 수 있습니다.

 

◾  if __name__ == "__main__": 

 

부분이 파이썬에서 코드의 시작부분을 알리는 것이죠. 그 하위에 있는 코드들은 윈도를 띄워서 프로그램을 보여주라는 의미를 가지고 있습니다.

 

 

특별히 수정할 사항(프로그램 시작과 함께 실행되어야하는 코드)이 있지 않다면 따로 건들 필요는 없습니다. 위에서 보여준 4가지의 영역에서 우리가 수정해야 할 부분은 다음과 같습니다.

  1. 라이브러리 불러오기
    • 경우에 따라서는 원하는 기능을 구현하기 위해서 별도의 라이브러리가 필요할 수 있기 때문입니다.
  2. ui파일 경로 지정
    • 이 경우, 경로 지정에 적절하게 변화가 피요할 수도 있습니다. 물론, 그런 경우는 거의 없습니다.
  3. 기능을 구현하는 클래스 부분
    • 해당 부분이 바로 핵심이 되는 것이죠. qtdesigner를 이용해 프로그램 모습을 꾸몄다고 해도, 별도의 코드들을 진행하면서 추가적으로 수정을 입력할 수도 있습니다.
    • 해당 부분은 수시로 변화할 것이며, 여러분의 상상과 바람을 실현시키기 위한 코드들이 모이는 곳이라고 할 수 있습니다. 

 

 

어떤 가벼운 기능의 프로그램이라도 동작(액션)이 존재한다면 하나부터 열까지 모두 코드로 지정을 해주셔야 합니다. 가령 예를 들어, Qlineedit 위젯을 통해 입력된 내용을 Qlabel 위젯에 반영한다면, 입력과 출력의 부분에 대한 코드가 필요합니다.

 

더불어, 입력(변화)의 상황일지 혹은 입력 후 액션(버튼 등)의 상황일지에 따라 코드는 달라질 수 있습니다. 물론, 두 가지 기능을 모두 구현할 수도 있습니다. 다만, 별도의 슬롯은 마련해야만 합니다.

 

qtdesigner에는 기본적인 함수는 마련되어 있기 때문에 앞서 언급한 내용 중 전자의 경우에는 간단하게 슬롯(기본함수)를 지정하는 것으로도 완성할 수 있는 부분이기도 합니다. 어떻게 진행할지, 어떻게 구성할지에 대한 고민이 자신이 원하는 프로그램을 만들어가는 생각일 것입니다.

반응형

댓글