PySide2をゼロから学んでいく～#0 環境構築～

https://qiita.com/karakuri-t910/items/c5dbd714cd54520f415d


* [#0 環境構築 ← ここ](https://qiita.com/karakuri-t910/items/f0736a322a6ba217a36c)
* [#1 ウィンドウ](https://qiita.com/karakuri-t910/items/7d2aac29d979f2413162)
* [#2 ボタン](https://qiita.com/karakuri-t910/items/5aae0ba3bed05eeb5109)
* [#3 ラベル](https://qiita.com/karakuri-t910/items/1bdbcbf8b4b92555c123)
* [#4 ラジオボタン](https://qiita.com/karakuri-t910/items/e54e771c576d2a0aa11a)
* [#5 チェックボックス](https://qiita.com/karakuri-t910/items/03debf242efd944eecc2)
* [#6 コンボボックス](https://qiita.com/karakuri-t910/items/bfd18dffbe2674a3b478)

# はじめに
PythonでGUI開発をするためのライブラリ「PySide2」の基本的な使い方を、いくつかの段階に分けて説明していきます。

当ページではPySide2のインストール手順について説明しております。


# 開発環境
以下の通りになります。

* Windows 10
* Python 3.8 以降

# サクッとPySide2について
GUIツールキットの一種である「Qt 5」をPythonでも使用できるようにしたライブラリのことです。

端的言えば「PythonでもQt 5を使ってGUI開発ができるライブラリ」のことです。

## PyQt 5と何が違うの？
ライセンスが違います。
ザックリと説明も載せておきます。

> ライセンスについて私は詳しくないので、詳しく知りたい方は各々で調べてください。
> 以下のライセンス説明を真に受けて大事にならないように・・・

| GUIツール名 | ライセンス | ライセンスの違い |
| --- | --- | --- |
| PyQt5 | GPL | 商用で利用する場合、ソースコードを公開しないといけない |
| PySide2 | LGPL | 商用でも、条件さえ満たせばソースコードを公開する必要がない |

会社などのソフト開発をする上で、企業秘密であるソースコードは絶対知られたくないと思います。

「でもPythonとQtを使って開発をしたい。。。」

この考えを実現できるのがPySide2って訳です。

# PySide2の環境構築手順
前提として<font color="red">Python3を事前にインストールしてください</font>。
Python3がインストールされているなら、あとは簡単です。

Python3のインストール手順はネット上に腐るほどありますので、このページでは省略します。
バージョン切り替え方法も載せているページがありましたので、一応参考例としてURLを載せておきます。

* https://mynavi-agent.jp/it/geekroid/2019/12/post-154.html
* https://gammasoft.jp/python/python-version-management/

## PySide2のインストール
ではPySide2のインストール手順を説明します。

* `Powershell` または  `コマンドプロンプト` を起動します。
* 起動後、`pip` コマンドでPySide2をインストールします。

```
pip install PySide2
```

これだけです。

## Qtプラットフォーム・プラグインのパスを通す
次に「Qtプラットフォーム・プラグインの場所」をWindowsが認識できるようにする必要があります。

要するに「環境変数のパスを通す」ことです。
これをやらないとPySide2をインポートできても、ウィジェットの表示ができなくなります。

以下の環境変数のパスを通します。

| 環境変数名 | 値 |
| --- | --- |
| QT_PLUGIN_PATH | C:\Users\\<font color="red"><ユーザ名></font>\AppData\Local\Programs\Python\\<font color="red">Python<バージョン番号></font>\lib\site-packages\PySide2\plugins |
| QT_QPA_PLATFORM_PLUGIN_PATH | C:\Users\\<font color="red"><ユーザ名></font>\AppData\Local\Programs\Python\\<font color="red">Python<バージョン番号></font>\lib\site-packages\PySide2\plugins\platforms |

<font color="red">赤文字</font>はお使いのPCやPythonバージョンごとに異なるので注意してください。

> 例えば以下のような感じ。
> 
> * QT_PLUGIN_PATH<br>C:\Users\\<font color="red">karak</font>\AppData\Local\Programs\Python\\<font color="red">Python38</font>\Lib\site-packages\PySide2\plugins

<details><summary>【旧バージョン】2021年4月時点のPySide2の環境変数の登録方法</summary><div>

| 環境変数名 | 値 |
| --- | --- |
| QT_PLUGIN_PATH | C:\Users\\<font color="red"><ユーザ名></font>\AppData\Local\Programs\Python\\<font color="red">Python<バージョン番号></font>\Lib\site-packages\PyQt5\Qt\plugins |
| QT_QPA_PLATFORM_PLUGIN_PATH<br><font color="gray">この変数は必要ないかも</font> | C:\Users\\<font color="red"><ユーザ名></font>\AppData\Local\Programs\Python\\<font color="red">Python<バージョン番号></font>\Lib\site-packages\PyQt5\Qt\plugins\platforms |

<font color="red">赤文字</font>はお使いのPCやPythonバージョンごとに異なるので注意してください。

> 例えば以下のような感じ。
> 
> * QT_PLUGIN_PATH<br>C:\Users\\<font color="red">からくり</font>\AppData\Local\Programs\Python\\<font color="red">Python38</font>\Lib\site-packages\PyQt5\Qt\plugins

</div>

環境変数の登録方法を2通り提示します。
① Windowsの環境変数に直接登録する
② Pythonプログラムの実行中だけ環境変数を登録する

両方設定したとしても問題ありませんので、気にせずバシッとやっちゃってください。

### 環境変数の登録方法　①Windowsの環境変数に直接登録する
<font color="red">このシリーズではこちらの方法を取ります。</font>

* スタートキーを押して「kannkyou」で検索します。<br>![000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614920/631948b8-8ba3-193b-aacb-86bb23a5691f.png)


* 「<ユーザ名>のユーザー環境変数(U)」→「新規(N)...」をクリックします。<br>![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614920/16a85400-be9f-18b1-d98c-b53c28bfbbca.png)


* 環境変数`QT_PLUGIN_PATH`と`QT_QPA_PLATFORM_PLUGIN_PATH`を登録します。<br>![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614920/127f2517-e782-cfff-9a4e-2a874c478557.png)


* あとは「OK」を押していけば環境構築は完了です。

### 環境変数の登録方法　②Pythonプログラムの実行中だけ環境変数を登録する
プログラムに以下の処理を追加します。
こっちの方が簡単だと思います。

```python
import PySide2
import os

# PySide2がインストールされているフォルダ名を取得
dirname = os.path.dirname(PySide2.__file__)
# PySide2のライブラリ下にある「plugins」フォルダと「platforms」フォルダの絶対パスを取得
plugin_path = os.path.join(dirname, 'plugins', 'platforms')
# プログラムの実行中だけ変数「plugin_path」のパスを通す
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path
```

# 動作確認
試しにボタンを表示するプログラムを作ってみました。

```python
# ①Windowsの環境変数に直接登録する　だけしか設定していない場合
from PySide2 import QtWidgets

app = QtWidgets.QApplication()
button = QtWidgets.QPushButton("Hello World!!")
button.show()
app.exec_()
```

これを実行して、以下が表示できれば環境構築は成功です。

![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614920/731582a7-7966-3899-7b90-6d5b5769c745.png)

ちなみに「②Pythonプログラムの実行中だけ環境変数を登録する」で環境変数を設定する場合、プログラムは以下のようになります。

```python
import PySide2
from PySide2 import QtWidgets
import os

# PySide2がインストールされているフォルダ名を取得
dirname = os.path.dirname(PySide2.__file__)
# PySide2のライブラリ下にある「plugins」フォルダと「platforms」フォルダの絶対パスを取得
plugin_path = os.path.join(dirname, 'plugins', 'platforms')
# プログラムの実行中だけ変数「plugin_path」のパスを通す
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path

app = QtWidgets.QApplication()
button = QtWidgets.QPushButton("Hello World!!")
button.show()
app.exec_()
```