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環境にも引き継ぐことができる。
QtのPython チュートリアルも参照
PySideと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上のvenv環境に完全に新規にインストールするやりかたが解明できていない。 もしもVirtualenvの環境でインストールできるのであれば、新規プロジェクト作成時にそのフォルダを参照することで、引き継ぐこともできるかもしれない。
PySideのサンプルなどを参考にPySide2用に書いたHello Worldのサンプルコードを以下に示す。
以下のようにして実行すると、
$ python3 helloworld_pyside2.py
ダイアログを表示する。
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()