Qt Creatorで作ったGUI画面.uiをpyside2-uicで.pyに変換(2018.5.13)

Summary
PySide2関連のまとまった情報があまりないのでまとめておく。 PySide2でGUIアプリケーションを作成する場合、Qtに付属のQt Creatorで画面設計をする方が効率が良い。PySide2パッケージに付属のpyside2-uicというコマンドで.uiファイルを.pyに変換できる。

具体的な手順は以下の通り

Qt creator Project

Qt CreatorでGUI画面を設計する

QtのインストールについてはQt5.9がインストール出来ない(2018.5.2)を参照。 Qt CreatorはQtがインストールされているフォルダにある。 こちらを起動。

Qt creator Project

起動すると表示される画面でNew Projectを指定して開始。

Qt creator Project

Qt Widgets Applicationを指定してChoose…ボタンで次に進む

Qt creator Project

プロジェクトファイル名と置き場所を指定

Qt creator Project

Desktop Qtを指定

Qt creator Project

GUI画面のクラス名と.uiファイルのファイル名を指定

Qt creator Project

version controlは特にしない

Qt creator Project

プロジェクトファイル生成完了

Qt creator Project

.uiファイルをダブルクリックしてDesigner画面を起動。 初期状態ではメインウインドウのみ

Qt creator Project

画面に必要なパーツを配置して完成

Qt creator Project

生成されたmainwindow.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>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <widget class="QPushButton" name="PlayButton">
    <property name="geometry">
     <rect>
      <x>40</x>
      <y>200</y>
      <width>113</width>
      <height>32</height>
     </rect>
    </property>
    <property name="text">
     <string>Play</string>
    </property>
   </widget>
   <widget class="QPushButton" name="StopButton">
    <property name="geometry">
     <rect>
      <x>240</x>
      <y>200</y>
      <width>113</width>
      <height>32</height>
     </rect>
    </property>
    <property name="text">
     <string>Stop</string>
    </property>
   </widget>
   <widget class="QSlider" name="horizontalSlider">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>180</y>
      <width>361</width>
      <height>22</height>
     </rect>
    </property>
    <property name="orientation">
     <enum>Qt::Horizontal</enum>
    </property>
   </widget>
   <widget class="QGraphicsView" name="graphicsView">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>10</y>
      <width>361</width>
      <height>161</height>
     </rect>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>400</width>
     <height>22</height>
    </rect>
   </property>
  </widget>
  <widget class="QToolBar" name="mainToolBar">
   <attribute name="toolBarArea">
    <enum>TopToolBarArea</enum>
   </attribute>
   <attribute name="toolBarBreak">
    <bool>false</bool>
   </attribute>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>

pyside2-uicコマンドで.uiファイルを.pyに変換

Qt CreatorでGUI画面を設計するで生成した.uiファイルを、pyside2-uicコマンドで.pyに変換

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

サンプルの起動方法なども生成する場合には、-xオプションをつける

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

生成されたmainwindow.pyは以下のようになっている。 これをpythonスクリプトから読み込んで表示する。

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

# Form implementation generated from reading ui file 'mainwindow.ui'
#
# Created: Sun May 13 09:55:53 2018
#      by: pyside2-uic  running on PySide2 5.11.0a1
#
# 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(400, 300)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.PlayButton = QtWidgets.QPushButton(self.centralWidget)
        self.PlayButton.setGeometry(QtCore.QRect(40, 200, 113, 32))
        self.PlayButton.setObjectName("PlayButton")
        self.StopButton = QtWidgets.QPushButton(self.centralWidget)
        self.StopButton.setGeometry(QtCore.QRect(240, 200, 113, 32))
        self.StopButton.setObjectName("StopButton")
        self.horizontalSlider = QtWidgets.QSlider(self.centralWidget)
        self.horizontalSlider.setGeometry(QtCore.QRect(20, 180, 361, 22))
        self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider.setObjectName("horizontalSlider")
        self.graphicsView = QtWidgets.QGraphicsView(self.centralWidget)
        self.graphicsView.setGeometry(QtCore.QRect(20, 10, 361, 161))
        self.graphicsView.setObjectName("graphicsView")
        MainWindow.setCentralWidget(self.centralWidget)
        self.menuBar = QtWidgets.QMenuBar()
        self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 22))
        self.menuBar.setObjectName("menuBar")
        MainWindow.setMenuBar(self.menuBar)
        self.mainToolBar = QtWidgets.QToolBar(MainWindow)
        self.mainToolBar.setObjectName("mainToolBar")
        MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
        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))
        self.PlayButton.setText(QtWidgets.QApplication.translate("MainWindow", "Play", None, -1))
        self.StopButton.setText(QtWidgets.QApplication.translate("MainWindow", "Stop", None, -1))

pythonプログラムから呼び出すコードを記述

PyCharmでプロジェクトを生成する。 PyCharmのインストールやPySide2の設定はmacOSでPyCharmを使う(2018.4.30)およびPySide2のインストール(2018.5.3)を参照。

PyCharm Project

プロジェクトファイル名や場所、venvの場所を指定する。システムにインストール済みのパッケージ設定を引き継ぐ場合には、“Inherit global site-packages”をチェックする。

PyCharm Project

ブランクのプロジェクトが生成される。

PyCharm Project

パッケージの確認はPyCharmのメニューバーから[File]–> [Default Settings…]

PyCharm Project

PyCharm Project

生成してすぐはProject Interpreterとして直前のプロジェクトの設定が指定されている場合がある。今回指定したProject Interpreter設定を選択(すぐに見つからない場合は時間が経過してから再度確認)

PyCharm Project

ファイル名を指定して.pyファイルを生成。ここではtest1.pyとした。

PyCharm Project

pyside2-uicコマンドで.uiファイルを.pyに変換で生成した.pyファイルをプロジェクトのフォルダにコピーしすると、自動的にインスペクターに追加表示される。

PyCharm Project

test1.pyの中身を追加。

PyCharm Project

test1.py


#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# pyside2-uic_test

import sys

from mainwindow import Ui_MainWindow

from PySide2.QtGui import *
from PySide2.QtCore import *
from PySide2.QtWidgets import *

class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        """Create MainWindow instance"""

        super(MainWindow, self).__init__(*args, **kwargs)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

def main():
    import sys

    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()
    

実行するには、PyCharmのメニューバーから[Run] –> [Run]

PyCharm Project

コマンドライン引数を指定する必要が場合には、Parametersで設定。 (今回は不要)

PyCharm Project

表示されたGUI画面

PyCharm Project

参考

Back to Index