gtkbuilderは、xmlで最も高度なgtkインターフェース記述形式です。
以前にlibgladeを使用したことがある場合、libglade-convertコマンドを使用して.gladeファイルを新しい形式に変換できます。
これはすべてWindowsで機能します。pygtkと必要なすべてのライブラリをインストールする必要があります。 将来、py2exeですべてをパックできるようになります。
glade-3を実行する
![](http://tabed.org/static/pygtkdemo/0.jpg)
ウィンドウを作成し、テーブルを配置します
![](http://tabed.org/static/pygtkdemo/3.jpg)
左上のセルにエントリを挿入し、パッキングで右に設定します
attachment-4で4列に拡大します
一般に、編集可能に設定します:いいえ
![](http://tabed.org/static/pygtkdemo/4.jpg)
シグナルのwindow1の場合、key-press-eventに「key_press」と入力します。
in destroy-“ quit”(ウィンドウを閉じるときにプログラムを終了するように)
key_press and quitは、コード内のメソッドの名前です
この場合、ボタンを押してウィンドウを閉じることにより、特定のアクションが実行されたときに呼び出されます。
![](http://tabed.org/static/pygtkdemo/13.jpg)
ボタンを追加
![](http://tabed.org/static/pygtkdemo/16.jpg)
残りはコードで生成します。
「=」およびリセットを除くすべてのボタンについて、信号を設定する/「put_text」をクリックした
「=」の場合は「計算」、リセットの場合は「リセット」
![](http://tabed.org/static/pygtkdemo/17.jpg)
クリックされるようにボタンの共通/アクセラレータを設定します
押すたびに キー、「=」の場合は「=」になり、「Return」はリセットされません
何も公開しません(エスケープが必要で、コードで実行します)
![](http://tabed.org/static/pygtkdemo/15.jpg)
demo.uiファイルに保存
コードを書く
![](http://tabed.org/static/pygtkdemo/9.jpg)
質問がある場合は、「devhelp」を実行してドキュメントを読んでください
![](http://tabed.org/static/pygtkdemo/help.jpg)
EntryDescriptorに注意してください-これはPython記述子であり 、
gtk.Entryの値をより便利に使用できます
残りはコメントから明確にする必要があります。
注:計算機は整数と整数除算で動作しますが、
つまり 5/2 = 2 :)この記事では、インターフェースの作成について説明しました。
気を散らさないように、できるだけシンプルに。
#!/ usr / bin / env python #コーディング:utf-8 #vim:ai ts = 4 sts = 4 et sw = 4 インポートgtk 輸入OS クラスEntryDescriptor(オブジェクト): def __init __(self、object_name): self.object_name = object_name def __get __(self、obj、cls): return obj.get_object(self.object_name).get_text() def __set __(self、obj、value): obj.get_object(self.object_name).set_text(値) クラス電卓(gtk.Builder): def __init __(self): super(電卓、自己).__ init __() #demo.uiをロード self.add_from_file(os.path.join(os.path.dirname(__ file __)、 'demo.ui')) #demo.uiに記述されているシグナルハンドラをselfオブジェクトに接続します self.connect_signals(自己) #ホットキーのグループを作成し、数字付きのキー用にウィンドウに接続します agroup = gtk.AccelGroup() self.window1.add_accel_group(agroup) #ボタンを作成し、ホットキーを掛けてtable1に配置します xrange(10)のiの場合: btn = gtk.Button(str(i)) btn.connect(「クリック」、self.put_text) btn.add_accelerator(「クリック」、agroup、ord(str(i))、0、0) y、x = i / 3、i%3 self.table1.attach(btn、x、x + 1、y + 1、y + 2) #ウィンドウとその上のすべてのウィジェットを表示する self.window1.show_all() def __getattr __(self、attr): #self.get_object( 'window1')よりself.window1を書く方が便利 obj = self.get_object(attr) objでない場合: AttributeErrorを発生させます( 'object%r has no attribute%r'%(self、attr)) setattr(self、attr、obj) objを返す #Python記述子。これにより、gtk.Entryの値をより便利に処理できます。 expr = EntryDescriptor( 'entry1') def計算(自己、ウィジェット=なし): self.exprでない場合:戻ります 試してください: self.expr = str(eval(self.expr)) 例外を除く、e: #ゼロなどに閉じることができます 印刷する defリセット(自己、ウィジェット): self.expr = '' def quit(self、widget): gtk.main_quit() def put_text(自己、ウィジェット): テキスト= widget.get_label() expr = self.expr expr [-1:]ではない場合、text.isdigit()ではなくisdigit(): #8 / * 2などを書くことができないように 帰る self.expr + =テキスト def key_press(自己、ウィジェット、イベント): #コードからボタンの名前を取得 キー= gtk.gdk.keyval_name(event.keyval) キー== 'BackSpace'の場合: self.exprの場合: self.expr = self.expr [:-1] elifキー== 'エスケープ': self.reset(なし) __name__ == '__main__'の場合: 計算機=計算機() gtk.main()
demo.py
demo.ui
python demo.pyを開始します。
![](http://tabed.org/static/pygtkdemo/demo.jpg)
トピックが興味深い場合は、次の記事でpygtkおよびpywebkitgtkに基づいたブラウザーの作成について説明すると思います。 インタラクティブコンソール(ipython); pythonとjavascriptの統合。