본문 바로가기
Python/PySide PyQt

[PySide6] pyside6-uic 사용하기

by ds31x 2024. 5. 7.

pyside6-uic

PySide6 프레임워크에서 지원하는 도구로
.ui 파일을 Python code 파일로 변환하는 컴파일러임
(User Interface Compiler, uic)

 


사용법

  1. 터미널로 해당 directory로 이동
    • terminal에서 변환하고자 하는 .ui 파일이 저장된 디렉토리로 이동.
  2. 명령어 실행
    • pyside6-uic를 사용하여 .ui 파일을 .py Python code 파일로 변환

이는 다음과 같은 형식으로 실행됨.

pyside6-uic yourfile.ui -o outputfile.py

import를 통한 Designer로 만든 widget 사용하기.

변환된 python code file에 정의된 widget class를 상속받아 PySide6 의 구현물에서 해당 ui의 widget을 사용가능함.

 

다음 코드가 위의 방법을 간단히 나타내고 있음.

from PySide6.QtWidgets import QMainWindow

# outputfile.py가 변환된 python code파일.
# Ui_MainWindow가 Qt Designer로 만들어진 widget class
from outputfile import Ui_MainWindow 

class MyWindow(QMainWindow, Ui_MainWindow): # 중복으로 상속.
    def __init__(self):
        super().__init__()
        self.setupUi(self) # 반드시 호출

 

 

아래의 코드는 이 문서의 밑에 있는 Example에 업로드되어 있는 ui를 이용하여 Qt GUI Application을 구현한 코드를 보여줌.

import sys
from PySide6.QtWidgets import QApplication, QMainWindow
from ex0_wnd import Ui_MainWindow  # 변환된 UI 모듈

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)  # UI 설정
        self.lineEdit.returnPressed.connect(self.update_label)  # LineEdit의 returnPressed 시그널 연결
        self.show()

    def update_label(self):
        text = self.lineEdit.text()  # LineEdit에서 텍스트 가져오기
        self.label.setText(text)  # Label의 텍스트 설정

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())
  • Qt Designer에서 수행하지 않은 signals and slots 처리를 구현함.
  • QMainWindowUi_MainWindow를 중복상속한 부분과
  • self.setupUI(self)를 호출하는 것을 잊지 말것.

Example

다음의 files를 참고.

Ex0_QtDesigner.ui
0.00MB
ex0_qtdesigner.py
0.00MB

 

위의 파일들은 아래와 같은 UI에 대한 것임.

 

위의 UI에 대한 .ui파일은 다음과 같음.

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>273</width>
    <height>265</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Ex0. QtDesigner</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QLabel" name="label">
      <property name="font">
       <font>
        <pointsize>25</pointsize>
        <bold>true</bold>
       </font>
      </property>
      <property name="text">
       <string>TextLabel</string>
      </property>
      <property name="alignment">
       <set>Qt::AlignmentFlag::AlignCenter</set>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QLineEdit" name="lineEdit"/>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>273</width>
     <height>24</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

 

이로부터 생성된 python code file은 다음과 같음.

# -*- coding: utf-8 -*-

################################################################################
## Form generated from reading UI file 'Ex0_QtDesigner.ui'
##
## Created by: Qt User Interface Compiler version 6.7.0
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################

from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
    QMetaObject, QObject, QPoint, QRect,
    QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
    QFont, QFontDatabase, QGradient, QIcon,
    QImage, QKeySequence, QLinearGradient, QPainter,
    QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QLabel, QLineEdit, QMainWindow,
    QMenuBar, QSizePolicy, QStatusBar, QVBoxLayout,
    QWidget)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(273, 265)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.verticalLayout = QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName(u"verticalLayout")
        self.label = QLabel(self.centralwidget)
        self.label.setObjectName(u"label")
        font = QFont()
        font.setPointSize(25)
        font.setBold(True)
        self.label.setFont(font)
        self.label.setAlignment(Qt.AlignmentFlag.AlignCenter)

        self.verticalLayout.addWidget(self.label)

        self.lineEdit = QLineEdit(self.centralwidget)
        self.lineEdit.setObjectName(u"lineEdit")

        self.verticalLayout.addWidget(self.lineEdit)

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 273, 24))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"Ex0. QtDesigner", None))
        self.label.setText(QCoreApplication.translate("MainWindow", u"TextLabel", None))
    # retranslateUi

같이 읽어보면 좋은 자료들

2024.05.06 - [분류 전체보기] - [PySide6] Qt Designer6

 

[PySide6] Qt Designer6

Qt DesignerQt Designer는 Qt 프레임워크를 활용하여 그래픽 사용자 인터페이스(GUI)를 쉽게 설계할 수 있게 도와주는 drag and drop UI Design Tool. 이는 개발자는 다음과 같은 기능과 장점을 제공함.:Drag and D

ds31x.tistory.com

2024.05.06 - [분류 전체보기] - [PySide6] QUiLoader 를 Qt Designer의 .ui 사용하기.

 

[PySide6] QUiLoader 를 Qt Designer의 .ui 사용하기.

QUiLoaderQUiLoader는 Qt 프레임워크에서 Qt Designer 로 생성된 .ui 파일을 runtime(런타임)에서 widget으로 변환하는 역할을 수행함..ui 파일들은 Qt Designer라는 도구를 사용하여 XML 형식으로 만들어졌으며,이

ds31x.tistory.com