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インスタンスが先に必要な場合があるが、それもセグフォで落ちるので対処に気づきにくい。

今後の予定

まあ、ぼちぼち書いていきますー。