pyside6-uic
PySide6 프레임워크에서 지원하는 도구로
.ui 파일을 Python code 파일로 변환하는 컴파일러임
(User Interface Compiler, uic)
사용법
- 터미널로 해당 directory로 이동
- terminal에서 변환하고자 하는
.ui
파일이 저장된 디렉토리로 이동.
- terminal에서 변환하고자 하는
- 명령어 실행
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 처리를 구현함.
QMainWindow
와Ui_MainWindow
를 중복상속한 부분과self.setupUI(self)
를 호출하는 것을 잊지 말것.
Example
다음의 files를 참고.
위의 파일들은 아래와 같은 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
2024.05.06 - [분류 전체보기] - [PySide6] QUiLoader 를 Qt Designer의 .ui 사용하기.
'Python > PySide PyQt' 카테고리의 다른 글
[PySide] Ex: Matplotlib 에서 상호작용 기능 구현 (0) | 2024.05.19 |
---|---|
[PySide] FigureCanvas.mpl_connect (0) | 2024.05.19 |
[PySide6] Qt Designer6 (0) | 2024.05.06 |
[PySide6] QUiLoader 를 Qt Designer의 .ui 사용하기. (0) | 2024.05.06 |
[PySide6] QProgressBar (0) | 2024.04.29 |