PyGTKとGladeを使用したユーザーインタフェースの作成

27316 ワード

転入先http://blog.chinaunix.net/u/5462/showart.php?id=150996
   原文:
   Tkinterを使ってユーザーインタフェースを作成するのに時間がかかりましたが、インタフェースとプログラムコードをどのように接続するかに苦労しました.別のツールパッケージを使ってインタフェースを作成してみることにしました.しばらく検索した後、PyGTKとGladeを使うことにしました.
私がこの2つの技術を使うことを決心した理由は:1.それらはプラットフォームにまたがる2.Gladeがコードとインタフェースを分離することができる願望である.
Gladeを聞いたことがない場合は、GTK+とGNOMEの下にあるユーザーインタフェースジェネレータです.ユーザーインタフェースを記述するxmlファイルを生成します.
   pyGTKのサイトには、PyGTKが次のように記述されています.
PyGTKはGTK+ライブラリにPythonプログラムで使いやすいパッケージを提供し、メモリの管理やタイプ変換などの煩雑な詳細を担当する.PyORBitやgnome-pythonと組み合わせると、完備した機能を持つGnomeアプリケーションを書くことができる.
ここから始めましょう.私がインストールしたばかりのDebianシステムにこれらを書いています.もしあなたもDebianまたはDebianベースのリリース版を使用すれば、PyGTKとGladeを取得するのは簡単です.
apt-get install python-gtk2 python-glade2
   Gladeを初めて起動したときのインタフェースです.
Gladeパネルの「Window」ボタンを押してメインウィンドウを作成する必要があります.このウィンドウのプロパティを編集できます.
   私たちはこのウィンドウをMainWindowと名付けて、それからそのタイトルを「Hello World!」に設定します.   VisualStudioのような統合されたインタフェース設計ツールを使用することに慣れている場合は、Gladeを最初に使用するときに少し不思議に思うかもしれません.特に、画面に載せたい場所にコントロールを置くのではなく、「パッケージ化」している場合があります.もっと奇妙なのは、(少なくとも私にとって)多くのインタフェース設計ツールがそうしていることです.他のプログラムはVisual studioのように実際にはおかしい.   いずれにしても私たちはガイドに戻って、次にしなければならないことはラベルを追加してユーザーにボタンをクリックすることを教えることです(もちろん私たちは文字をボタンの上に置くことができますが、コントロールがどれだけ楽しいですか?!).GTKが容器を使ってデバイスをパッケージ化するため、私たちがしなければならない最初のことは容器を追加することです.ラベルをボタンの上に置くので、だから2行の縦箱(Vertical Box)を使いました.まずGladeパネルのアイコンをクリックしてからメインウィンドウをクリックして追加することができます.このとき、小さなダイアログボックスがポップアップされて、何行が必要かを聞くことができます.今、2行が必要です.   次にGladeパネルのラベルボタンをクリックして、先ほど追加したウィンドウの1行目をクリックしてラベルを追加します.ラベルの名前はデフォルトの名前「label 1」を使用して、その文字(text)を「Please click on the button!」に変更します.ラベルのテキストの変更はプロパティウィンドウで行うことができます.このウィンドウにはまだ気づいていないかもしれません.現在選択されているコントロールを表示して変更できます.   次に、ラベルを追加するのと同じ方法で2行目にボタンを追加します(もちろん1行目ではありません).このボタンをbtnHelloworldと命名し、上の文字を「Click me!」に変更します.    プロジェクトのオプションを設定する必要があります.このプロジェクトをPyHelloWorldと名付け、「my projects/PyHelloWorld」フォルダに保存します.
次に、PyHelloWorldディレクトリには、.gladepという名前のgladeを拡張するエンジニアリングファイルと、.gladeという名前のgladeインタフェースXMLファイルの2つのファイルが作成されています.   このgladeファイルをマウントして表示するpythonプログラムを作成する必要があります.正面にPyHelloWorld.pyというファイルをこのディレクトリに作成しました.
まず、このプロジェクトに必要なすべてのライブラリをインポートする必要があります.
#!/usr/bin/env python

import sys
try:
import pygtk
pygtk
.require("2.0")
except:
pass
try
:
import gtk
import gtk.glade
except:
sys.exit(1)

    次に私たちがしなければならないのは主要なクラスを作成することです.私はそれをHelloWorldGTKと命名しました.私たちはそれを書くことによって_init__関数を使用してgladeファイルをロードします.
class HellowWorldGTK:
"""This is an Hello World GTK application"""

def __init__(self):

#Set the Glade file
self.gladefile = "pyhelloworld.glade"
self.wTree = gtk.glade.XML(self.gladefile)

#Get the Main Window, and connect the "destroy" event
self.window = self.wTree.get_widget("MainWindow")
if (self.window):
self.window.connect("destroy", gtk.main_quit)

   上のコードでは、私たちが最初にしたこと(クラスを定義した後)は、私たちが使用するgladeファイルを指定し、gtk.glade.XMLオブジェクトを作成することです.正面はpyGTK 2リファレンスのこのオブジェクトの説明です.
このオブジェクトはXMLインタフェース記述の一例を表す.このようなオブジェクトが作成されるとXMLファイルが読み出され,インタフェースも作成される.Gtk.glade.XMLオブジェクトはxml記述に付与されたオブジェクトの名前でこれらのオブジェクトにアクセスできるインタフェースを提供する.このgtk.glade.XMLオブジェクトはXML記述に命名された信号と信号プロセッサを関連付けるためにも使用できる.Gladeライブラリ(libglade)は、プログラムのシンボルテーブルで信号プロセッサ名を検索し、できるだけ多くの信号プロセッサを自動的に関連付けることができるインタフェースも提供する.
    したがってgtk.glade.XMLオブジェクトを作成する後、メインインタフェースを作成してロードする必要があります.
   次に、メインウィンドウをインスタンス化し、その破棄イベントをget.main_quit()関数に関連付けます.これにより、メインウィンドウを閉じるときにプログラムが終了します.そうしないと、メインウィンドウが閉じた後もプログラムが実行され続けます(これは明らかに私たちが望んでいない).
   これらはHelloWorldGTKクラスが完了した作業です.次に、このクラスのインスタンスを作成してGTKのメインループを開始する必要があります.
if __name__ == "__main__":
hwg = HellowWorldGTK()
gtk.main()

   このファイルを実行すると、この小さなGTKウィンドウが表示されます.ウィンドウを閉じるときに正常に終了する以外に何もできません.
PyGTKとGladeを使用したユーザーインタフェースの作成(part 2)
テキスト
前編に続く:)
    次に、このボタンのクリックイベントを関数に関連付けます.Glade編集インタフェースを再使用してこの機能を実現する必要があります.
   まずメインウィンドウでこのボタンオブジェクトを選択し、プロパティウィンドウで「信号」タブページを選択します.ここでは、情報閲覧ボタン(...)をクリックして「Clicked」を選択して信号を追加する必要があります.これにより、デフォルトでは「on_btnHelloWorld_clickedのプロセッサ」です.このプロセッサの名前を変更できますが、デフォルトの名前を使えばいいです.
Gladeの仕事はこれで終わりました.今、このイベントとコードの中のいくつかのものを関連付ける必要があります.幸いなことに、これは簡単に使えます.
  gtk.glade.XML.signal_Autoconnect関数で実現する.
#Create our dictionay and connect it
dic = { "on_btnHelloWorld_clicked" : self.btnHelloWorld_clicked,
"on_MainWindow_destroy" : gtk.main_quit }
self.wTree.signal_autoconnect(dic)

簡単に言えば、この辞書はイベント名と関連する関数で構成されています.ボタンのクリックイベントと関数を関連付けて、「on_MainWindow_destoryイベントはgtk.mainquit()関数に関連付けられています.これは私たちがウィンドウを閉じたときのプログラムコードの置き換えです.元の辞書を使用したい場合は、gladeのメインウィンドウにdestoryイベントを追加する必要があります.   次はクラスHelloowWolrdGTKのbtnHelloWorldを作成することです.clicked関数:
def btnHelloWorld_clicked(self, widget):
print "Hello World!"

本当に簡単ですね.これを実行するときは、「Click Me!」をクリックします.コマンドラインに出力された「Hello World!」ボタンが表示されます.これがこの授業の内容ですが、今私は本当にPyGTKとGladeを使って仕事をするのが好きです.次は完全なプログラムコードです.
#!/usr/bin/env python

import sys
try:
import pygtk
pygtk
.require("2.0")
except:
pass
try
:
import gtk
import gtk.glade
except:
sys.exit(1)

class HellowWorldGTK:
"""This is an Hello World GTK application"""

def __init__(self):

#Set the Glade file
self.gladefile = "pyhelloworld.glade"
self.wTree = gtk.glade.XML(self.gladefile)

#Create our dictionay and connect it
dic = { "on_btnHelloWorld_clicked" : self.btnHelloWorld_clicked,
"on_MainWindow_destroy" : gtk.main_quit }
self.wTree.signal_autoconnect(dic)

def btnHelloWorld_clicked(self, widget):
print "Hello World!"


if __name__ == "__main__":
hwg = HellowWorldGTK()
gtk.main()