Pyside2를 이용해 Python GUI 프로그래밍하기

P

Python을 사용하면서 아쉬운 점은 GUI 프로그래밍이 불가하다는 점입니다. 이를 해결하기 위한 방안으로 wxPython, pyside, Tkinter 등 다양한 모듈이 있습니다.
각 모듈별로 라이선스가 다르게 적용되니 상업적 용도로 사용하시려면 라이선스에 대해 잘 알아보시는 게 좋습니다.

Pyside2 설치하기

이 글에서는 OS X 환경에서 Pyside2를 이용해서 GUI 프로그래밍을 해보도록 하겠습니다.
Pyside2는 Qt Company에서 배포하며 Python 3.4이하 버전 및 Qt4 버전 까지 지원하는 pyside와는 다르게 Python 3.5 이상 버전 및 Qt5 버전을 지원합니다.

$ pip3 install pyside2

터미널에서 위 명령어를 사용하여 pyside2를 설치합니다.

import sys
import random
from PySide2.QtWidgets import (QApplication, QLabel, QPushButton,
                               QVBoxLayout, QWidget)
from PySide2.QtCore import Slot, Qt

class MyWidget(QWidget):
    def __init__(self):
        QWidget.__init__(self)

        self.hello = ["Hallo Welt", "你好,世界", "Hei maailma",
            "Hola Mundo", "Привет мир"]

        self.button = QPushButton("Click me!")
        self.text = QLabel("Hello World")
        self.text.setAlignment(Qt.AlignCenter)

        self.layout = QVBoxLayout()
        self.layout.addWidget(self.text)
        self.layout.addWidget(self.button)
        self.setLayout(self.layout)

        # Connecting the signal
        self.button.clicked.connect(self.magic)

    @Slot()
    def magic(self):
        self.text.setText(random.choice(self.hello))

if __name__ == "__main__":
    app = QApplication(sys.argv)

    widget = MyWidget()
    widget.resize(800, 600)
    widget.show()

    sys.exit(app.exec_())

설치가 완료되면 test.py 파일을 생성하고 Pyside2 공식 사이트에 있는 샘플 코드를 그대로 복사하여 줍니다. 해당 파일을 저장하고 아래 명령어를 사용해 정상적으로 작동하는지 테스트를 해봅니다.

$python test.py
test.py 실행화면

pyside2를 설치하고 샘플 코드를 작성하여 정상적으로 동작하는지 확인해보았습니다.

Qt Creator 설치하기

GUI 작업을 코드로만 하게 되면 원하는 오브젝트를 적재적소에 위치 시키는데 어려움이 있습니다. 그렇기 때문에 GUI 개발이 가능한 IDE를 사용하게 되는데 저는 Qt Creator를 사용해 보도록 하겠습니다.

Qt Download 페이지로 이동하여 최신 릴리스 빌드의 qtcreator 항목으로 이동합니다.
원하시는 버전을 선택하셔서 각 운영체제에 맞는 프로그램을 다운로드해 설치하시면 됩니다.
이 글에서는 4.9.2 버전의 OS X 프로그램을 다운로드해 설치하였습니다.

UI 파일 만들기

Qt Creator

프로그램을 실행시키고 새로운 파일 만들기를 선택합니다.

왼쪽 아래 Files and Classes 항목에서 Qt를 선택하고 가운데 항목에서 Qt Designer Form를 선택합니다.

기본 템플릿을 선택할 수 있는데 이 글에서는 Main Window를 선택하였습니다.

파일명과 저장 위치를 선택하고 계속 진행합니다.

마지막으로 소속 프로젝트를 선택할 수 있지만 UI 파일만 생성할 것이므로 Done을 눌러 파일 생성을 마무리합니다.

파일이 생성되면 GUI 개발을 할 수 있는 창이 출력되며 사용 가능한 위젯들이 왼쪽에 출력됩니다. Drag & Drop으로 위젯들을 원하는 곳에 배치할 수 있습니다.

UI 파일을 Python 파일로 변환하기

생성한 파일에 UI를 자유롭게 배치한 후에 Python에서 실행 가능한 파일로 변환해 주어야 합니다.

$ pyside2-uic -x mainwindow.ui -o mainwindow.py

터미널을 이용해 UI 작업 파일을 python 코드로 변환하여 줍니다.

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

# Form implementation generated from reading ui file 'mainwindow.ui',
# licensing of 'mainwindow.ui' applies.
#
# Created: Thu Jul 18 00:13:36 2019
#      by: pyside2-uic  running on PySide2 5.13.0
#
# WARNING! All changes made in this file will be lost!

from PySide2 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.menubar = QtWidgets.QMenuBar()
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtWidgets.QApplication.translate("MainWindow", "MainWindow", None, -1))


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

생성된 Python 파일을 확인해보면 Qt Creator에서 작업한 내용물이 모두 작성되어 있음을 확인할 수 있습니다.

$ python mainwindow.py

마지막으로 생성된 python 코드를 실행하여 작업한 UI가 정상적으로 출력되는지 확인해봅니다.

Add comment

By berabue

최근 글

글 목록

최근 댓글

그 밖의 기능