PySideの準備
PySideってなに?
Qt ベースのGUIフレームワークのPythonバインディング。
PyQtというのもありますが、PySideはLGPLライセンスの元で再実装されたものです。 使い方はPyQtとほとんど同じ。
PySideおすすめの理由
PySideのみの理由:
- LGPLのため、ソース公開しにくい業務での利用が可能。
PySide、PyQt共通の理由:
QtCreatorが良くできていて、連携させることでUIデザインやモック作りが捗る。
クラス群設計の一貫性が高く、見た目もバランスが良い。
イメージクラス実装がよくできていて、多様なフォーマットを一貫した操作で加工できちゃう。
WebKitやSVGなどもそこそこ実用性の高いレベルの機能を備えてる。
Python3版があること
- 多バイト文字圏ではu文字列だらけになるがPython3ならスッキリ。
- 子プロセス起動などで引数のエンコードで迷わずにすむ。
シグナル/スロットの概念は理解しやすくて便利
継承&オーバーライドやメソッドバインドと違い疎結合で繋げられる
(キックする側が蹴られる側のクラス定義を知らなくてもイイ)
カスタムシグナル作ったりがスグ出来るようになる。
PySideの始め方
PySideのAPIではすべての文字列にunicodeであることを求めます。 そういう意味ではPython3系を使うほうがソースがスッキリしていいと思います。 (Python3では内部で扱う文字列が基本unicode文字列なので。)
今現状ならPython3.2がいいかと思います。 その場合各種プラットフォームでのインストールもマニュアル通りにできます。
以下は「どうしても最新のPython3.3がイイ!」という方向けのインストール手順です。
for Mac-OSX
- MacPortsインストーラをダウンロード
- MacPortsのインストール
- sudo port install python-3.3
- sudo port install py33-pyside
for Windows
- 自分のOSが32bit版か64bit版かを気をつけて各インストーラをダウンロード
- Python-3.3のインストール
- PySide1.1.1-py33のインストール
for Linux
めんどくさい。ググれ(モヒカン風)
私の場合の例(ubuntu-12.10):
sudo apt-get install python3.3-dev qt-sdk cmake git
pyvenv py33pyside
cd py33pyside
source ./bin/activate
pip install git+https://github.com/PySide/pyside-setup.git@1.1.1
PySideとwxPythonの比較
PySide | wxPython | |
---|---|---|
概要 | ||
ライセンス | LGPL | wxWidgets(LGPL-Like) |
由来 | Qt | wxWidgets |
フォームエディタ | QtCreator(QtDesigner) | XRCed/wxGlade/他 |
プラットフォーム | ||
64bit/32bit | OSXはユニバーサル/その他は別々リリース | OSXはユニバーサル/その他は別々リリース |
Windowsサポート | Good | Good |
OSXサポート | 少し遅れてるが良好 | 少し遅れてて |
Linuxサポート | Good | Good |
unicodeサポート | unicode版のみリリース | ansi/unicode別々リリース |
Python3サポート | Good | Experimental |
設計 | ||
イベントマップ | スロットとシグナルを接続 | メソッドをバインド |
イベントマップをフォームエディタ連携 | 定義追加、接続可能 | 抽象メソッド定義のみ |
リファレンス | QtとPySideで独立のリファレンス | wxWidgets本家と共用のリファレンス |
ネットワーク支援 | あり | あり |
SVGサポート | あり(AAレンダで綺麗) | あり |
OpenGLサポート | PyOpenGL依存 | PyOpenGL依存 |
内蔵ブラウザ | WebKit | ActiveX(Windows)/WebKit |
実装 | ||
Appクラス | QtGui.QApplication | wx.App |
フレーム | QtGui.QFrame | wx.Frame |
ダイアログ | QtGui.QDialog | wx.Dialog |
テキストラベル | QtGui.QLabel | wx.TextLabel |
画像 | QtGui.QLabel | wx.StaticImage |
画像周り | ||
画像クラス | QtGui.QImage | wx.Image |
32bitカラー対応 | 仕様に取り込まれた | 後付仕様として付け足された |
インデックスカラーサポート | あり | あり |
PNGサポート | あり | あり |
JPEGサポート | あり | あり |
1bppサポート | Good | Poor |
PySideでえ?と思うところ
- 型のミスマッチで極めてあっさりセグフォでPythonもろとも落ちる
- スロットの用意されていないハンドリングがそこそこあり、そこをカスタマイズするには継承クラスが必要。
- QApplicationインスタンスが先に必要な場合があるが、それもセグフォで落ちるので対処に気づきにくい。
今後の予定
まあ、ぼちぼち書いていきますー。