QUiLoader
QUiLoader
는
Qt 프레임워크에서 Qt Designer 로 생성된.ui
파일을
runtime(런타임)에서 로딩하여 widget으로 생성하는 역할을 수행함.
.ui
파일들은 Qt Designer라는 도구를 사용하여 XML 형식으로 만들어졌으며,- 이 파일들은 사용자 인터페이스의 레이아웃과 속성을 정의하고 있음.
QUiLoader
의 사용은 code를 통한 직접적인 인터페이스 구현이 아닌 GUI Tool인 Qt Designer를 사용가능하게 하여 다음의 장점을 가짐.
- 개발 과정을 간소화시킴.
- 인터페이스의 변경이 프로그램 코드를 수정하지 않고도 가능하게 함 (
.ui
파일만 재작성) - 이는 전체적인 유지 보수의 편리성을 제공할 수 있음.
참고로, .ui
를 사용하는 다른 방법은
pyside6-uic
command line program을 이용하여.ui
파일을 Python code로 변환하고,- 해당 code에 정의된 widget 클래스를 상속하는 방식을 통해
Qt GUI Application을 구현하는 방법이 있음.
pyside6-uic design.ui -o ui_design.py
사용법
QUiLoader
객체를 만들고,load()
메소드를 호출하여.ui
파일에 해당하는QFile
객체를 넘겨주면,- 이 메소드는 해당하는
.ui
파일을 읽고 이를 통해 widget을 동적으로 생성하여 반환함. - 동적으로 생성된 widget은 바로 애플리케이션에 통합되어 사용될 수 있음.
Example
다음의 Python code snippet은
- PySide6 라이브러리를 사용하여
- Qt Designer를 통해 생성된
.ui
파일을 이용하여 - 간단한 GUI(Graphical User Interface) 어플리케이션을 생성하는 방법을 보여줌.
아래의 QLineEdit
객체에서 문자열을 입력하고 엔터를 누르면, 위의 QLabel
객체의 text이 Hello <입력된 문자열>
로 갱신됨.
아래 이미지 참고.
이는
QtUiTools.QUiLoader
를 사용하여 Qt Designer가 생성한.ui
파일에 해당하는 widget을 만들고- 이를 이용하여 GUI Application을 만드는 방법을 보여줌.
- uic를 이용하는 경우엔 상속이 이용되는 것과 달리 자신의 attribute로 사용하는 차이점을 가짐 (has-a relation을 이용).
import os, sys
from PySide6.QtWidgets import (
QApplication,
QMainWindow,
)
from PySide6.QtUiTools import QUiLoader
from PySide6.QtCore import QFile
class MW (QMainWindow):
def __init__(self, ui_fstr):
super().__init__()
self.wnd = self.ds_get_wnd_from_ui(ui_fstr)
self.ds_setup()
self.setCentralWidget(self.wnd)
self.show()
def ds_setup(self):
self.wnd.lineEdit.returnPressed.connect(self.ds_update_label)
def ds_update_label(self):
self.wnd.label.setText(f'Hello, {self.wnd.lineEdit.text()}')
def ds_get_wnd_from_ui(self, ui_fstr):
ui_loader = QUiLoader()
root_dir = os.path.dirname(__file__)
ui_path = os.path.join(root_dir, ui_fstr)
ui_file = QFile(ui_path)
ui_file.open(QFile.ReadOnly)
wnd = ui_loader.load(ui_file, None)
ui_file.close()
return wnd
if __name__ == '__main__':
app = QApplication(sys.argv)
mwd = MW('Ex1_QtDesigner.ui')
sys.exit(app.exec())
'Python > PySide PyQt' 카테고리의 다른 글
[PySide6] pyside6-uic 사용하기 (0) | 2024.05.07 |
---|---|
[PySide6] Qt Designer6 (0) | 2024.05.06 |
[PySide6] QProgressBar (0) | 2024.04.29 |
[PySide6] matplotlib 이용하기: FigureCanvasQTAgg, NavigationToolbar2QT (0) | 2024.04.29 |
[PySide6] 2024년 참고할 만한 책들. (0) | 2024.03.04 |