Thor's Columns
PyQtでお手軽GUI開発♪―――は可能だったか? 第1回 環境設定編

PyQtでお手軽GUI開発♪―――は可能だったか? 第1回 環境設定編


 さて、今回よりタイトルみたいな連載をやろうかと思います。


 PyQt(ぱいきゅーと)というのは、まあ“ウインドウ”アプリケーションを作るための開発環境のことで、まだ使い始めて一月半くらいなんですが結構ネタが溜まったんで、いわゆる備忘録も兼ねてしばらく書いていこうと思います。


 今回はまずインストールして開発環境を整えるまでのお話です。


そもそもの始まり

 要するにDelphi6に代わるWindows上のお手軽なGUI開発環境が欲しかったわけです。


 Delphiは昔はずいぶん使い倒した記憶があるんですが、しばらく使わないんでアップグレードしてなかったら、いつの間にか太古のバージョンとなりはてておりました。

 それを最近ちょっと使わなければならなくなって使ってみたら(たとえばこれの弥生海岸線描画ツールとか、これPMLエミュレータとか……)まだ使えたことがわりと驚きなんですが、それでもさすがにいろいろ至らぬところが多くてまともな環境にしたいなあと思っていたのが発端です。

 もちろん最新のバージョンもあるんですが、買おうと思ったらけっこう値が張るし、今後絶対必要というわけでもないし―――もちろんタダと言うだけならVisual Studio Community Editionとかもあるんですが、今さらVC++とかは使いたくないし……

 で、ふっと思い出したのがPythonでした。


 Pythonは以前(2010年頃だったか……)ちょっと使う機会があって、かなり気に入った言語だったんですが、基本コマンドラインでないと使えません。でもこれでGUIできたらいいかもと思ってちょっと調べてみたら、そのころはあまり決定版がありませんでした。

 Pythonの標準ライブラリにはTkinterというGUIツールキットが添付してますが、これはかなり論外な代物です。wxWidgetsとかいうのも何かぱっとしないし―――しかし、Qtというのは名前(キュート♡もしくはキューティー♪)からしてわりと有望に見えました。

 これはX Window SystemのKDEのベースになっていてモノはしっかりしてるようだし、何よりも以下のような“QtDesigner”というビジュアルのui開発ツールも付属しているようです。



 GUIアプリを作る場合、uiのデザインがビジュアルにできるかどうかはというのは決定的要因です。これがないとコントロールの位置とかをせこせこ数値で入れて動かしてみて、また位置を調整して―――といったまさに不毛な作業が発生して「お手軽な開発」というのは不可能といっていいでしょう。

 しかしそのころはQt3からQt4への移行期でなんか混乱していて、さらにはPython自身も2から3への移行期でごちゃごちゃしてて、結局なんだかそれっきりになっていました。


 それから7~8年。そんなことを思いだして再度調査してみたら、今ではわりと良くなってるっぽい雰囲気です。とは言ってもまとまった情報とかはあまりなく、個々の項目ごとにググって調べるしかないような状況ではありますが、まあ何とかなりそうな印象を受けたんで、こうしてやってみることにしてみたわけなのでした。


それでどれにするか?

 そこでまず直面したのが何を何で使うかということでした。


 そもそもQtというのはC++で書かれたライブラリで、もちろんそのままではPythonから使えません。そこでPythonからQtを使えるようにしたバインディングが存在します。

 ところがこれには“PyQt”と“PySide”という2種類があります。また現在Qtはバージョン4と5が共に使われている状態で、それも含めればさらに種類が増えます。

 このPyQtとPySideの違いは主にライセンス関係で、PyQtがGPL、PySideがLGPLになっていて、どうやらそのへんで揉めてプロジェクトが別れたもののようです。要するに商用アプリを作ろうと思ったらGPLよりLGPLの方が縛りが少ないよ、みたいな感じなんですが、まあ自分にとってはどっちでもいい話です。


 ―――ってか、オープンソース界隈では結構こういう話が多いみたいで、ユーザーにとっても不便だし、開発側も戦力が分散されて困るんじゃないかと思うんですが……


 ただPySideはまだQt5に対応したPySide2がやっと出たばかりのようで、基本Qt4にしか対応していません。

 Qtのバージョンについては、特にしがらみもないならQt5の方がいいでしょうが、4と5の間の差はあまりないみたいなので、別に4でも構わないかもしれません。

 要するに、自分的にはわりとどれでもよかったりします。


 それともう一つ、GUIアプリを作るならやはりちゃんとした統合開発環境(IDE)が必要でしょう。簡単なスクリプトとは違ってややこしいプログラムの場合、やはりコード補完機能やらデバッグ機能が充実してないと厳しいものがあります。

 そのへんに関しても調べれば“PyScripter”、“Spyder”、“PyCharm”といったものがあるようです。


 もう最初はどれがいいかなんて分からないんで、とりあえずPySide+PyScripterという組み合わせでやってみることにしました。


PyScripter+Pyside

 自分のPCにはすでにPythonの3.4が入っていたので、まずPySideをダウンロードしてインストールします。

 これは特に問題なく終わって、ちらっと動かして見たらけっこうよさげな印象です。なにしろサンプルソースが充実していてそのまま動かせたりします。

 しかもQtDesignerが最初から添付してあったのでこれは便利!―――と思ったのですが、なぜかメニューが英語しか出ません。またQtAssistantがない、とかいってHelpも表示されません。


 後から考えればかなりどうでも良かったんですが、まだ右も左も分からないんで、しょうがなく“Qt4”をインストールすることにします。

 こちらに入っていたQtDesignerはメニューも日本語だしHelpも出ますが、Helpの内容はWeb上にあるQt Documentationと基本同じ内容のようで、これだったらブラウザを横に立ち上げてた方が、最近ではGoogle先生の翻訳精度も上がってるし便利だったりします。

 結局、QtDesignerを日本語化するためだけに1G近くもあるQt4を入れたことになるのは釈然としませんが、まあ気にしないことにしましょう。


 続いてPyScripterですが、何か分かりにくいところにあるのが不思議だったんですが、まあ何とか見つけ出してインストールします。

 これはどうも作ってる人がDelphi使いのようで、DelphiのIDEの動作をコピーしもののようです。なので最初はこれはいい! と思ったのですが……


 ところが、まずはウインドウを表示させるだけのプログラムを動かして見たら、表示は一発でできたんですが、アプリ終了後も死んだウインドウが画面上に残ってしまってタスクバーから殺さないといけないとか、ちょっとわけが分かりません。

 しかも調べてみたらPyScripterはどうも2015年頃を最後にアップデートがないみたいで、要するに現在は開発中断中のようです。


 というわけでPySripterを使うのは諦めるしかありませんでした。

Spyder+PyQt5

 次に試したのがSpyderというIDEです(PyCharmは有料だし日本語化もされてないみたいなので次の選択肢ということで)


 さて、ところがこのSpyder自身がPyQt5で書かれているので、動かすためにはPyQt5が必須になります。PySideを動かすためにPyQtを入れるのも変な話だし、別にPySideにこだわっているわけでもないので、今後はPyQt5を使うことにします。まあこちらの方が新しいバージョンなんで今からならこっちの方がいいでしょうし。


 しかしSpyderのサイトに行くとインストールするのは色々面倒みたいなことが書いてあります。以下に軽く訳してみたら……


ウインドウズにインストールをする場合

簡単な方法

 スパイダーは以下のディストリビューションに最初から入ってます!

 Anaconda

 WinPython

 Python(x,y)

 インストールするだけですぐ使えるよ!


難しい方法

 スパイダーをインストールしたければ下記の手順に従って下さい。

 通常の手順で以下のソフトをインストールします。

 Python本体

 PyQt5かPyQt4

 それから以下のコマンドでスパイダーをインストールします。

 pip install spyder

 もちろん選ぶのは「簡単な方法」です。それに調べてみたらAnacondaという奴には最初からQtDesignerも入っているとか。


 Anacondaというのもググれば簡単に見つかって、Windows用のインストーラも用意されています。ただでかいファイルなんで結構時間がかかります。最初はこんなにたくさんライブラリなんていらないんじゃないかと思いますが、まあディスクの容量が足りないわけではないし気にしないようにします―――が……

インストール失敗!

 インストールのログを調べると、ファイルのコピーとかは終わってるんですが、最後の最後にスタートメニューへの登録やパス設定などで失敗しています。

 スタートメニューはともかく、パスが通っていなければ何も動きません。自分で設定しようにも何にどういうパスが必要かなんて分からないし……

 それでそういう状況はないかググってみたら、どうも日本語文字のユーザー名ではダメっぽいみたいです。ただ自分の名前はアルファベットだけでつけてるんですが、確か“All User”でインストールしたんで見てみるとユーザーの中に「パブリック」さんがいるし……

 多分これが原因と思ってもういちど今度は自分だけの設定でやってみたわけですが……

やっぱインストール失敗!!!

 それ以外に思いあたることと言えば、通常使う環境は「一般ユーザー」にしてるということ。最初のセットアップ時にユーザーは一般ユーザーをお勧めしますとWindowsが言うんでお勧めされてみたんですが、こういうトラップがあったとは……

 そこで今度はWinPythonを入れてみます。こっちの方はインストールできましたが、やっぱりよけいなライブラリが大量に入ってくるし、こちらにはQtDesignerはついていません。結局Qt5をインストールしなければならないわけで……


というわけで

 そこでぶち切れてちょっとまず素の状態でやってみるのがいいだろうと全てアンインストールします。

 Unix環境では最初からPythonが入っていて、そういった環境との絡みでいろいろややこしいことがありそうですが、Windowsにはそんなしがらみはありません。多分クリーンインストールすればそんなトラブルはないだろうと。

 アンインストール時にもしょーもないトラブルには見舞われましたが(アンインストーラがフリーズしたかと思ったら、ダイアログが後ろに隠れてたとか……)ともかく綺麗さっぱりして今度は「難しい方法」を試してみます。


 まず本家サイトからPython3.5.2のインストーラを持ってきてインストールします。

 これは全く問題なく終わります。Pathの設定も問題なく、コマンドプロンプトでpythonと打てばインタープリタが起動します。

 続いて“pip install PyQt5”と打ってPyQt5を入れます。こんな大物が入るのか心配になりますが、これも問題なく終わり。

 続いて“pip install spyder”と打ってSpyderを入れますが、これもまたあっさり終わり。

 なんだよ、簡単じゃねーか! と思ったところでちょっとした問題が起こります。

Spyderをどうやって起動したらいいんでしょうか?

 というかそもそも今インストールしたPythonとかはどこにいるんでしょう? Program Filesとかを覗いてもいないんですが―――と、いろいろ探したらUserディレクトリの\AppData\Local\Programsの中にインストールされてました。Spyderもその中のさらに下の方にありました。ここって普通隠しフォルダなんですが―――まあいいでしょう。

 以下が起動したSpyderの画面です。



 最後にQtDesignerを使うために、本家のQt5.7.1をインストールします。またそれからdesigner.exeを探しまわったりしたあげく、やっとこさ必要な物が動く環境ができあがります。

 これだけで結局数日くらいが潰れてるような気がしますが……

だがしかし……

 それから約一ヶ月の後、結局Anacondaを入れることになってしまいました。


 上記の環境で別に問題なく動いていたんですが、いろいろやってるうちにNumbaとかCythonとかいう物を使いたくなってきたわけです(それもそのうちネタにしますが)

 ところがそこでまずNumbaをpipで入れようとすると、Cコンパイラがねーぞ! と言われて却下されてしまいました。pipで配る物の中にはソースコードレベルで管理しているのもあるようで、インストール時にビルドが発生する場合があるのです。しかし自分の環境にそんなものないし、そのためにVisualStudioとかを入れるのもあれだし、Gnuのコンパイラは32ビットみたいだしと、どうしようもありません。

 ところがこのAnacondaというのはcondaという拡張モジュール配布機能も持っているみたいで、こちらはバイナリベースで落ちてくるのでそのまま使えるのです。


 というわけでAnacondaのインストールですが、前回できなかった物を今回どうやったかというと―――単に自分に管理者権限をプレゼントしただけですw

 ともかくこうすることで今度は問題なくインストールができました(ただその後のアップデートにけっこう時間がかかりましたが)

 そのうえ上記のNumbaやCythonも最初っから入っているので、これ以上何もする必要がありません。

 ただAnacondaの場合ファイルへの関連づけまではやってくれないので、拡張子pyのファイルはpython.exeへ、拡張子pywのファイルはpythonw.exeへというのは自分で設定する必要がありますが、ともかくこれで全て世は事もなしでしょう。


 というわけでやっとインストール編は終わるかと思ったら―――結局その次の日にはCコンパイラをインストールしている自分がおりました。

 というのはCythonという奴は、要するにPython(のような)スクリプトをCのソースに変換するツールなんで、それを動かすためには結局コンパイルしなければならないのです。

 ぐぬぬ、さてどうしてくれようと思ったところに見つけたのが“Visual C++ 2015 Build Tools”という奴でした。これはVC++のコンパイラだけのセットということなんで、あ、もうこれっきゃないとこれに決めます。

 いや、それでもインストールに一時間くらいかかりましたが、ともかくこれでやっと本当に環境が整ったわけですが―――ともかく結論としては、

 ということでした。あー、疲れた……


 というわけで次回は「ハローワールド編」です。


2017-03-26