PyQt 入門編

# Qt 5.14 Release！！
いきなりテーマと関係ない話ですみません。
皆さん、Qt 5.14 がリリースされていますよ！！
![スクリーンショット 2019-12-14 22.02.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62136/a837169e-4959-ff53-5520-2ab15686293e.png)
久しぶりに Qt を Install しようとしたところ、気がつきました(実はhermitさんと一緒にいた時に気がついたのですが・・・)。
早速 5.14 を Install してみようかと思いましたが、今回の目的は新機能を使うことでは無く、バインディングツールなどの互換性も考慮すると、LTS 最新の 5.12.6 が無難かと思いました。時間がある時、5.14 もトライしてみようと思います。

# はじめに
今回で7回目の投稿となります、HW 開発者の ynuma です。
簡単に近況を書かせていただきます。

早いもので、娘がもう少しで３歳になります。
先日は七五三の写真撮影を行ってきました。
休日は娘中心の生活です。

仕事の状況に大きな変化はありませんが、Pythonを使って機械学習を取り入れた評価を行ったりしています。
Qtを使う機会はほとんどありませんが、趣味でアプリケーションを作成する意欲はあるので、学習は続けて行きたいと思っています。

# 今回のテーマについて
本題になりますが、今回のテーマは PyQt についてです。
皆さんご存知でしょうか？

当初、仕事に関係する機械学習をテーマにする予定でしたが、Qt本体には機械学習をサポートする機能が無い事が分かったので、残念ながら今回のネタにはできませんでした（間違いでしたら、ご教授願います）。
機械学習を行うのであれば、Python を使うのがトレンドかと思います。
Python も割と歴史があるので、グラフ化等のライブラリ類は豊富にあるかと思いますが、Python から多少知識のある Qt の機能も使えたら便利かも、と思ったのがきっかけです。

# 参考書籍
あさのかずおさん著
”Python で GUI をつくろう”
をかなりの部分で参考にさせていただいています。
12/12 helicalgear さんが投稿された記事
[個人的観測範囲内で補足できたQt関連書籍の紹介](https://qiita.com/helicalgear/items/d42d74b502b1e331d1c2)
でも紹介されています。
図や説明が豊富で、初心者の方でも容易に理解できると思いますので、オススメです！！
QtQuick の例を豊富に掲載しているのも魅力だと思います。

# こんな方にオススメです
まずは入門編ということで、Qt はある程度知っているけど、PyQt は全く使ったことの無い方を対象にさせていただきます。
または、Python を使っていて、Qt の豊富な機能を活用したいと考えている方にも参考になるかと思います。

# PyQt とは？
Qt の Python バインディングで、イギリスの Riverbank Computing 社が開発されたものとのことです。バインディングは、結びつけることを意味します。要するに、Python と Qt を結び付けるもの、という意味です。より具体的には、Python から Qt を呼び出せるようにするためのものということになるかと思います。

# History
いつ頃から開発が行われたものなのか正確にはわかりませんでしたが、2007年頃には存在していたようです。
Nokia(現在は The Qt Company) が開発された PySide も同種のものとのことですが、こちらは PyQt の Riverbank Computing 社とライセンス合意形成に失敗したために、代替品として開発されたもののようです。

# ライセンス
PyQt は GPL です。
参考までに、PySide は LGPL です。
企業利益を優先すると PySide を使いたくなりそうですが、PyQt の方が利便性が良いそうです。企業としてどちらを採用するかは、悩ましいところですね。

# Install
以下、PyQt を使えるようにするための手順を簡単にまとめます。

1. Anaconda Install(Python 言語用ディストリビューション)
2. Qt Install
3. Anaconda から PyQt 用仮想環境の構築
4. 作成した仮想環境に PyQt を Install

# Anaconda Install(Python 言語用ディストリビューション)
![スクリーンショット 2019-12-14 18.35.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62136/d6740377-14ed-d3b4-5bff-877db5e2d3fb.png)
Anaconda は以下の機能を提供しているそうです。
・Python の仮想環境を複数作成できる
・複数の Python バージョンの使い分けが可能
・各環境毎の Python インタープリタの使い分けが可能
・パッケージ管理システムの conda を利用可能

手順詳細は Web に情報が沢山あるので、割愛します。

# Qt Install
皆さんご存知かと思いますが、下記サイトから、Qt online Installer をダウンロードして実行するのが簡単かと思います。
https://www.qt.io/download-open-source

# Anaconda から PyQt 用仮想環境の構築
1. Anaconda navigator を起動します。
![スクリーンショット 2019-12-14 18.35.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62136/22320ec6-fcaa-39ba-7d73-ab29fe4bbcac.png)
2. Environment→Create と実行し、PyQt 用の仮想環境を作成します。  
名前や Packages は下記を参考にしてください。
![スクリーンショット 2019-12-14 18.36.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62136/48b56e62-df86-617f-d4d1-a8704ebe3f89.png)

# 作成した仮想環境に PyQt を Install
1. Anaconda Navigator 上の仮装環境の名前の横にある三角ボタンをクリックし、「Open Terminal」を選択します。
![スクリーンショット 2019-12-14 23.18.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62136/9c1a1255-24b9-06fa-97e2-0f4240657090.png)
2. terminal から PyQt5 を Install します。以下の例が参考になるかと思います。

```
Last login: Fri Dec 13 03:13:56 on ttys000
(base) numac:~ ynumajir$ /Users/ynumajir/.anaconda/navigator/a.tool ; exit;
(Python3_7) bash-3.2$ pip install PyQt5
Collecting PyQt5
  Downloading https://files.pythonhosted.org/packages/93/5b/2ba062584e8b407b443b7ac7b6687e157d22b0f875cfd1dbe5baf82f6177/PyQt5-5.13.2-5.13.2-cp35.cp36.cp37.cp38-abi3-macosx_10_6_intel.whl (39.8MB)
     |████████████████████████████████| 39.8MB 23.1MB/s 
Collecting PyQt5_sip<13,>=4.19.19
  Downloading https://files.pythonhosted.org/packages/ca/77/ac0e8908be37523f0d93b8002641d11cfbc231c3e9dbaa4835f8073b397d/PyQt5_sip-12.7.0-cp37-cp37m-macosx_10_9_x86_64.whl (62kB)
     |████████████████████████████████| 71kB 8.5MB/s 
Installing collected packages: PyQt5-sip, PyQt5
Successfully installed PyQt5-5.13.2 PyQt5-sip-12.7.0
(Python3_7) bash-3.2$ pip list
Package    Version            
---------- -------------------
certifi    2019.11.28         
pip        19.3.1             
PyQt5      5.13.2             
PyQt5-sip  12.7.0             
setuptools 42.0.2.post20191201
wheel      0.33.6             
(Python3_7) bash-3.2$ 
```

# Sample program の実行

以下、簡単な MainWindow を表示する python コードです。

```QMainWindow.py

# - * - coding: utf8 - * -
  
import sys

from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel

class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()
        self.title = 'PyQt test(QMainWindow)'
        self.width = 400
        self.height = 200
        self.setWindowTitle(self.title)
        self.setGeometry(0, 0, self.width, self.height)
        label = QLabel('This is PyQt test.', self)
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())
```

以下、実行結果です。
`$ python QMainWindow.py`
![スクリーンショット 2019-12-15 0.37.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62136/1ad9fa09-046b-7786-9071-50747cc042d8.png)
以上で、無事 Python から Qt ライブラリが使えるようになりました。

# 終わりに
今回は、PyQt を使ってQtの簡単な呼び出しが実行できるところまでの手順をまとめました。
使用した PC には元々 Anaconda や python 環境を setup してあったので、比較的楽に立ち上げる事が出来ました。
この結果、機械学習結果を Qt の GUI で表示する事も可能になったかと思います。
次回は、PyQt で３次元グラフをできるだけ簡単に作れないか調べてみたいと思います。