본문으로 바로가기
728x90

1. 코드에서 위젯 생성과 실행

코드상에서 직접 위젯을 생성하고 실행을 하는 코드입니다.

import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow

class ExampleWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PyQt5 Begin")
        self.resize(400, 200)
        label = QtWidgets.QLabel('라벨', self)
        label.move(0, 50)
        button = QtWidgets.QPushButton('버튼', self)
        button.move(0, 100)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWin = ExampleWindow()
    mainWin.show()
    app.exec_()

 

2. PyQt5.uic.pyuic 모듈을 통한 코드 변환

디자이너를 통해 UI 파일을 생성하고 이를 변환합니다.

 

python -m PyQt5.uic.pyuic 'in.ui' -o 'out.py' 

(-m 옵션은 해당 파이썬이 가지고 있는 모듈을 실행하는 것입니다.)

(pyqt) PS C:\Users\Desktop\pyqt\Example\_begin> python -m PyQt5.uic.pyuic .\example.ui -o 2.py

아래와 같은 코드가 생성됩니다.

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

# Form implementation generated from reading ui file '.\example.ui'
#
# Created by: PyQt5 UI code generator 5.14.1
#
# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(320, 240)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(70, 30, 56, 12))
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(80, 100, 75, 23))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 320, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "라벨"))
        self.pushButton.setText(_translate("MainWindow", "버튼"))

 

다음과 같이 어플리케이션을 실행하기 위한 코드를 삽입해야 합니다.

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    app.exec_()

 

 

3. UI와 코드의 연결

UI 파일을 읽어서 연결하는 방식으로 추천드리는 방법입니다.

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

ui = uic.loadUiType('example.ui')[0]
class ExampleWindow(QMainWindow, ui):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWin = ExampleWindow()
    mainWin.show()
    app.exec_()

 

정리

방법 설명
1 예제용.
2 거의 사용하지 않는 방법이며 디버깅용으로 활용할 수 있다.
3 디자이너를 활용하여 편하게 디자인한다.
물론 다양한 이벤트, 시그널에 대한 처리는 직접해야한다.

세 방법의 차이점은 초기화와 관련이 있습니다.