pygtk / gtkbuilderの紹介:電卓を書く

最も原始的な計算機の例を使用して、pygtkでのインターフェースの作成を調べてみましょう。 多くの写真、少しのコード。

gtkbuilderは、xmlで最も高度なgtkインターフェース記述形式です。

以前にlibgladeを使用したことがある場合、libglade-convertコマンドを使用して.gladeファイルを新しい形式に変換できます。



これはすべてWindowsで機能します。pygtkと必要なすべてのライブラリをインストールする必要があります。 将来、py2exeですべてをパックできるようになります。

glade-3を実行する



ウィンドウを作成し、テーブルを配置します



左上のセルにエントリを挿入し、パッキングで右に設定します

attachment-4で4列に拡大します

一般に、編集可能に設定します:いいえ





シグナルのwindow1の場合、key-press-eventに「key_press」と入力します。

in destroy-“ quit”(ウィンドウを閉じるときにプログラムを終了するように)

key_press and quitは、コード内のメソッドの名前です

この場合、ボタンを押してウィンドウを閉じることにより、特定のアクションが実行されたときに呼び出されます。



ボタンを追加



残りはコードで生成します。

「=」およびリセットを除くすべてのボタンについて、信号を設定する/「put_text」をクリックした

「=」の場合は「計算」、リセットの場合は「リセット」



クリックされるようにボタンの共通/アクセラレータを設定します

押すたびに キー、「=」の場合は「=」になり、「Return」はリセットされません

何も公開しません(エスケープが必要で、コードで実行します)



demo.uiファイルに保存

コードを書く



質問がある場合は、「devhelp」を実行してドキュメントを読んでください





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を開始します。





トピックが興味深い場合は、次の記事でpygtkおよびpywebkitgtkに基づいブラウザーの作成について説明すると思います。 インタラクティブコンソール(ipython); pythonとjavascriptの統合。



All Articles