UP | HOME

wxPython 入門

Table of Contents

アプリケーション

アプリケーション とは、特定のタスクやタスクのグループを実行するコンピュータプログラムです。 ウェブブラウザ、メディアプレイヤー、ワードプロセッサーなどは典型的なアプリケーションだと言えるでしょう。 ツールユーティリティー という用語は、単一のタスクを実行するより小さくシンプルなアプリケーションを指します。 UNIXの cp というプログラムは、こうしたツールの良い例でしょう。 これらは全て コンピュータソフトウエア と呼ばれています。 コンピュータソフトウェアはより広義的な用語で、OSやデータ、コンピュータプログラムやアプリケーション、MP3ファイルやゲームなどを指します。 アプリケーションは、その用途によって4つの分野に分類することができます。

./img/areas.jpg

オンラインショッピングアプリケーションや、ウィキ、ブログなどは、有名なwebアプリケーションの例です。 これらはwebブラウザ経由でアクセスされます。 デスクトップアプリケーションの例としては、MayaやOpera、OpenOfficeやWinampなども含まれるでしょう。 企業コンピューティングも固有の分野ですが、この分野におけるアプリケーションは非常に大きく複雑です。 携帯機の為に作られたアプリケーションには、携帯電話やコミュニケータ、PDA端末などのために開発されたものが含まれます。

プログラム言語

現在よく使われているプログラミング言語はいくつかあります。 以下のリストは、 TIOBE というプログラミングコミュニティが出した指標に基づいています。 数値は2010年8月現在のものです。

順位言語割合
1Java18.2%
2C17.1%
3C++9.8%
4PHP8.3%
5Visual Basic5.7%
6C#5.0%
7Python4.7%
8Objective-C3.7%
9Perl2.3%
10Ruby1.9%
11JavaScript1.7%

Javaは最も広く使われているプログラム言語です。 Javaは可搬性のある携帯機のアプリケーションや、さまざまな電化製品上でのプログラミング、そして企業アプリケーションを作るのに適しています。

アプリケーションの実に1/4がC/C++で実装されています。 C/C++はシステムプログラミング言語として最も広く使われており、OSやいろいろなデスクトップアプリケーションを記述する標準言語となっています。 多くの有名なデスクトップアプリケーションがC++で作られていて、MS Office、Macromedia Flash、Adobe Photoshopや3D Maxなどがそうです。 ゲームプログラミング業界では、この2つの言語が独占状態です。

PHPはwebプログラミングを独占しています。 Javaが大きな組織で使用されている傍ら、PHPは小さな会社や個人に使われています。 PHPは動的なwebアプリケーションを作るのに使われます。 Visual Basicは主に RAD で使用されます。 RAD とは、迅速な(Rapid)アプリケーション(Application)開発(Development)という意味です。

次なる主役となるべくMicrosoftが作ったC#ですが、その時代はまだやってきていません。

PerlとPythonとRubyは最もよく使われているスクリプト言語で、共通点を多く持っています。 そしてこれらの言語はお互いにライバルでもあります。

Objective-C は主にApple社で使用されている言語です。 近年、iPhoneやiPadが普及したことにより注目が集まっています。

JavaScriptはブラウザで動作するクライアントサイドのプログラム言語です。 この分野は競争相手がおらず、事実上の標準言語となっています。

Python

./img/pythonlogo.png

Pythonは グイド・ヴァンロッサム によって開発され、1991年にリリースされたスクリプト言語です。 ABCとHaskellというプログラミング言語の影響を受けています。 Pythonは高水準で、汎用性のある、マルチプラットフォームなインタープリタ型言語です(動的言語と呼ぶ人もいます)。 非常に学習しやすい言語です。 Pythonはミニマル言語です。 見た目の特徴は、セミコロン(;)とブラケット({})ではなく、インデントを使っているところでしょう。 最新のバージョンは2010年7月にリリースされた2.7です(別系統の3.1.2も2010年3月にリリース)。 今日では、Pythonは世界中から集まった多くのボランティアによってメンテナンスされています。

GUIアプリケーションを開発する方法として、 PythonプログラマにはPyGTK・wxPython・PyQtという3つの素晴らしい選択肢があります。 公式のツールキットはTkInterですが、動作が遅く見た目にも格好悪い上、長い間アップデートされていません。 またTclに依存している(Tcl言語が必ずインクルードされなければならない)のも不恰好です。 上記の3つのツールキットは、全てにおいてTkInterに優っています。 なぜTkInterが長年にわたって排除されないのか、不思議でなりません。

wxPython

wxPythonはデスクトップGUIアプリケーションを作るための、クロスプラットフォームなツールキットです。 wxPythonを使うことで、開発者はWindows・Mac・Unixシステム上でアプリケーションを開発することができます。 wxPythonは、C++で記述されたクロスプラットフォームライブラリであるwxWidgetsのラッパに当たります。 wxPythonは5つの基本モジュールから構成されます。

./img/modules.jpg

コントロールモジュールは、グラフィカルなアプリケーションによくある基本的なウィジェットを提供します。 例えば、ボタンやツールバー、メモ帳などです。 ウィジェットはWindowsOSでは「コントロール」と呼ばれます。

コアモジュールは開発に使用される基本クラスから成ります。 基本クラスには、すべての親クラスであるObjectクラス、ウィジェットのレイアウトを整えるために使われるSizerクラス、 Eventクラスや、Point・Rectangleといった図形クラスが含まれます。

GDIモジュールはウィジェットを描画するためのクラスの集まりです。 このモジュールにはフォントや色、ブラシ、ペン、画像を操作するクラスも含まれます。

Miscモジュールは、その他様々なクラスと機能の集合です。 ロギングや、アプリケーションの構成、システムの設定、ディスプレイやジョイスティックを取り扱うために使用されるクラスなどがあります。

ウィンドウモジュールは、アプリケーションを形成するいろいろなウィンドウで構成されます。 パネル、ダイアログ、フレームやスクロールウィンドウなどです。

wxPython API

wxPython API はウィジェットと関数の集合です。 ウィジェットはGUIアプリケーションの構成するのに必ず必要な要素です。 Windowsではコントロールと言われます。 プログラマは大きく2つのグループに分類できます。 アプリケーションを記述する人とライブラリを作る人です。 私たちの場合、wxPythonはアプリケーションを記述するプログラマによって使用されるライブラリです。 技術的には、wxWidgetsというC++で書かれたGUI用APIのラッパです。 ですから、wxPythonはネイティブのAPIではないのです。 言い換えると、wxPythonは直接的にはPythonで書かれていないことになります。 私が知る限り、インタープリタ言語用のネイティブなGUIライブラリはJavaのSwingぐらいでしょう。

wxPythonには多くのウィジェットがあります。 これらは、いくつかのグループに分けることができます。

基本ウィジェット

これらウィジェットは、派生クラスに対して基本的な機能を提供します。 祖先クラスとも呼ばれ、直接使用されることはありません。

./img/base.jpg

トップレベルウィジェット

これらのウィジェットは互いに独立しています。

./img/toplevel.jpg

コンテナ

コンテナは他のウィジェットを格納します。

./img/containers.jpg

動的ウィジェット

これらのウィジェットはユーザーが編集できます。

./img/dynamic.jpg

静的ウィジェット

これらのウィジェットは、情報を表示するものです。 ユーザーが編集することはできません。

./img/staticwidgets.jpg

その他のウィジェット

これらのウィジェットはステータスバー、ツールバー、メニューバーを実装します。

./img/bars.jpg

継承

wxPythonのウィジェット間には、継承と呼ばれる特殊な関係があります。 継承はオブジェクト指向プログラミングで重要な位置を占めます。 ウィジェットは階層を形成しています。 ウィジェットは他のウィジェットの機能を引き継ぐことができます。 既存のクラスは基底クラス、親クラス、または祖先クラスと呼ばれます。 継承したクラスは、派生クラス、子クラス、子孫クラスと呼ばれます。 これらの用語は生物学から借用されています。

./img/inheritance.png

アプリケーションでボタンウィジェットを使う場合のことを考えてみましょう。 ボタンウィジェットは、4つの異なった基底クラスを継承しています。 最も近いクラスは、 wx.Control クラスです。 ボタンウィジェットは、小さいウィンドウクラスの一種なのです。 スクリーン上に表示されるウィジェットは、すべてウィンドウだといえます。 ですから、これらすべてはwx.Windowクラスを継承しているのです。 目に見えないウィジェットもあります。 例えば、Sizerやデバイスコンテキストや、ロケールオブジェクトなどです。 目には見えるけれども、ウィンドウではないクラスもあります。 たとえば、カラーオブジェクトや、キャレットオブジェクト、カーソルオブジェクトなどです。 すべてのウィジェットがコントロールではありません。 たとえば、wx.Dialogはコントロールではありません。 コントロールは、 コンテナ と呼ばれる他のウィジェットに配置されるものを指します。 これが、wx.Control基底クラスを分割して持っている理由です。

すべてのウィンドウはイベントに対して反応します。 ボタンウィジェットもそうです。 ボタンをクリックすると、 wx.EVT_COMMAND_BUTTON_CLICKED イベントが発行されます。 ボタンウィジェットはwx.EvtHandlerクラスをwx.Windowクラス経由で継承しています。 イベントに反応するウィジェットは、wx.EvtHandlerクラスを継承していなければなりません。 最後に、全てのオブジェクトはwx.Objectから派生しています。 wx.Object はwxPythonにおける全オブジェクトの母、イヴだと言えるでしょう。

wxPythonをセットアップする

この章では、wxPythonライブラリをセットアップする方法について見ていきましょう。 適切なOSを持っていれば、この過程は非常に楽になるでしょう。

Windows XPでwxPythonをセットアップする

wxPythonの公式webサイトからバイナリをダウンロードできます。 Pythonのバージョンに合ったバイナリを選択する必要があります。 基本的には2つの選択肢があります。

  • win32-unicode
  • win32-ansi

普通はUnicode版を選びます。 Unicode版は英語以外の言語にも対応しています。 インストーラが自動的にPythonインタープリタへのパスを検出してくれるでしょう。 やることといえば、利用規約に同意するかどうか確認するくらいです。

./img/xpsetup.jpg

他にも独立したパッケージがあります。 win32-docs-demos と呼ばれるもので、デモやドキュメント、サンプルなどから構成されます。 これは開発者向けに書かれているものです。 WindowsにおけるPythonインタープリタに関する有用な情報です。 Pythonスクリプトをクリックすると、コマンドプロンプトが立ち上がります。 これが規定の動作になっています。 この動作を変更するには、Pythonプログラムをpythonw.exeバイナリと関連付ける必要があります。 Pythonのアイコンを選択し、プロパティの項目を選んでください。 変更ボタンを押し、Pythonがインストールされているディレクトリにあるpythonw.exeを選択しましょう。 私の環境では、C:\Program Files\Python25\pythonw.exe になります。

Ubuntu LinuxでwxPythonをセットアップする

インストール手順はWindows XPよりはるかに単純です。 Ubuntuは素晴らしいLinuxディストリビューションです。 wxPythonをインストールするのは朝飯前といったところでしょうか。

./img/synaptic.png

Synapticパッケージマネージャを使うだけで済みます。 GNOMEデスクトップ環境であれば、[システム]>[管理メニュー]にあります。 wxPythonのパッケージはpython-wxgtkx.x.という名前で呼ばれています。 パッケージマネージャが依存関係を適切に扱ってくれます。 私たちはインストールしたいパッケージにチェックを入れて適用ボタンを押すだけでいいのです。 Ubuntuパッケージは常に新鮮です。 他のディストリビューションでは古いパッケージしか扱っていません。 ですから、最新の状態を保つためにwxPythonをソースコードからビルドするハメになります。

The original page is here.

Date: 2010-10-28 19:47:05 JST

HTML generated by org-mode 6.36c in emacs 23