PySide2のインストール(2018.5.3)

2018.5.5追記

Summary
Python3用のPySide2は現時点ではQt5.9にのみ対応しているらしい。(Qt5.9のインストールはここを参照)
うまくいかないかと懸念していたが、案外簡単にインストール完了。 PyCharmのvirtualenvにインストール方法は不明のため継続調査 –> 素の環境でPySide2パッケージがインストールできていれば、New Project作成時にProject Interpreter: New Virtualenv environment指定で“Inherit global site-packages”にチェックを入れておくことで、Virtualenv環境にも引き継ぐことができる。

PySideとQt

QtのPython チュートリアルも参照

PySideとPySide2のコードの差異については以下で確認

PySide2のインストール

Qt for PythonおよびQt for Python GettingStartedを参考に最新版のPySide2 5.11.0a1のWheelを指定してインストールしてみた。 .whlファイルについて

pip3 install --index-url=http://download.qt.io/snapshots/ci/pyside/5.11/latest/ pyside2 --trusted-host download.qt.io

素の環境でPySide2パッケージがインストールできていれば、New Project作成時にProject Interpreter: New Virtualenv environment指定で“Inherit global site-packages”にチェックを入れておくことで、Virtualenv環境にも引き継ぐことができる。

PyCharm New Project setting

継続検討課題

現時点ではPyCharm上のvenv環境に完全に新規にインストールするやりかたが解明できていない。 もしもVirtualenvの環境でインストールできるのであれば、新規プロジェクト作成時にそのフォルダを参照することで、引き継ぐこともできるかもしれない。

Sample Code

PySideのサンプルなどを参考にPySide2用に書いたHello Worldのサンプルコードを以下に示す。

以下のようにして実行すると、

$ python3 helloworld_pyside2.py

ダイアログを表示する。
PyCharm icon

コード

helloworld.py

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

from PySide2 import QtCore, QtGui, QtWidgets

class QHelloWorld(QtWidgets.QWidget):
    u"""sample widget"""

    text_changed = QtCore.Signal()

    def __init__(self, *args, **kwargs):
        """Create QHelloWorld instance"""

        super(QHelloWorld, self).__init__(*args, **kwargs)

        self.setup_ui()
        self.setup_events()

    def setup_ui(self):
        u"""IU setting"""

        base_layout = QtWidgets.QVBoxLayout(self)
        base_layout.setObjectName('base_layout')

        self.lineedit = QtWidgets.QLineEdit(parent=self)
        self.lineedit.setObjectName('lineedit')
        base_layout.addWidget(self.lineedit)

        self.button = QtWidgets.QPushButton(self.tr("&Say"), parent=self)
        self.button.setObjectName('button')
        base_layout.addWidget(self.button)

    def setup_events(self):
        u"""Event setting"""

        QtCore.QMetaObject.connectSlotsByName(self)

    def get_text(self):
        return self.lineedit.text()

    def set_text(self, text):
        self.lineedit.setText(text)


    text = QtCore.Property(str, get_text, set_text, notify=text_changed)

    @QtCore.Slot()
    def on_button_clicked(self):
        self.text = u"Hello world"

def main():
    import sys

    app = QtWidgets.QApplication(sys.argv)
    widget = QHelloWorld()
    widget.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

Back to Index