/ PROGRAMMING, PYTHON, GUI

PyQt6 + Qt Designer

모든 GUI 인터페이스를 프로그래밍만으로 설계하는 것은 어려움이 있다. Qt는 편리한 디자인 도구인 Qt Designer를 제공한다.

PyQt 정보

Qt Designer에서 .ui 파일을 생성 및 디자인하고, 완성된 .ui파일을 다음과 같은 두 가지 방식 중 하나를 택해 PyQt6에 적용할 수 있다.

  1. .loadUI() 메소드로 클래스에 로드한다.
  2. pyuic6 도구를 이용해 파이썬 코드로 변환한다.

.ui 파일 직접 로드

import sys
from PyQt6 import QtWidgets, uic

app = QtWidgets.QApplication(sys.argv)

window = uic.loadUi("mainwindow.ui")
window.show()
app.exec()from PyQt6 import uic

loadUi() 메소드를 사용하기 위해 uic 클래스를 임포트해야 한다. 이 메소드는 .ui 파일명을 인자로 받고 PyQt6 오브젝트를 리턴한다.

이미 존재하는 위젯에서 .ui 파일을 로드하기 위해서는, uic.loadUi(".ui파일", self) 와 같은 형태로 호출한다.

이 방식은 컴파일이 필요 없어 단순하지만, uic를 이용해 동적으로 로드하므로 IDE에서 객체명 자동완성이 되지 않는다는 치명적인 단점이 있다.

파이썬 코드로 변환 (권장)

pyuic6 mainwindow.ui -o MainWindow.py

위와 같은 명령어로 파이썬 파일로 변환 가능하다. 이 파일을 직접 수정하는 것은 권장되지 않는다. 수정은 Qt Designer에서 진행하고, 이 파일을 import하여 override 방식으로 사용하는 것이 권장된다.

from MainWindow import Ui_MainWindow

생성된 파이썬 모듈로부터 Ui_{Qt Studio에서 설정한 메인 윈도우 클래스명}을 임포트한다.

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, *args, obj=None, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.setupUi(self)

위와 같이 클래스의 두 번째 Argument로 임포트한 클래스를 넘겨줘서 상속하도록 하고, __init__ 에서 .setupUi(self) 메소드를 호출하면 된다.


참고문헌

PythonGUIS