wiki:waue/2010/0510

Version 7 (modified by waue, 15 years ago) (diff)

--

PyGTK+ 研究
glade3.6 + Python 2.x + pygtk2

環境

  • ubuntu 9.10
  • glade3.6.1 + Python 2.6.4 + pygtk2 皆用 apt-get 安裝

心得

  • pygtk+ 的程式架構為 程式邏輯 與 圖形介面 分成兩個不同的檔
    • 程式邏輯 : python檔 (xx.py)
    • 圖形介面 : 可藉由 glade3輔助來產生圖形layout 的xml格式檔,共可分兩種
      • xx.glade = 使用 libglade 函式庫
      • xx.xml = 使用 gtkbuilder 函式庫

glade3 畫面

http://www.micahcarrick.com/mc_images/gtk-glade-tutorial/glade-3-tutorial-1.jpg

gtk 手冊導讀

http://www.pygtk.org/docs/pygtk/ 中 class-XXX.html 說明

  • Synopsis & Methods : Synopsis 列出此 XXX 物件可用的 Methods,而這些function 則是透過 py 檔,用來改變屬性值或驅動動作的方法
  • Ancestry :類別的繼承關係
  • Properties & Style Properties :glade 中 properties 部份的 前三個tag 所定義的屬性
  • Signals & Signal Prototypes: 驅動訊號,此部份的說明等同於glade 中 "properties -> 訊號 " 的地方。

Exam 1

此為 libglade 函式庫範例

  • 此範例原文為 簡單計算器:pygtk連接glade設計的界面
  • glade 畫面
  • 對照到 http://www.pygtk.org/docs/pygtk/class-gtkbutton.html 網頁的畫面
  • python 的 部份程式碼
    #!/usr/bin/env python
    import gtk
    import gtk.glade
    class calc:
        def __init__(self):
          # 在 py 檔中 導入glade 
            self.glade_file = "calc.glade"  
            self.main_window = gtk.glade.XML(self.glade_file)
            self.window = self.main_window.get_widget ("calc_window")
            # 建立處理訊號常數的字典
            events_dic = {
                          "haha":self.handle_haha_show,
                          "yaya":self.handle_yaya_show,
                          "on_button4_clicked":self.handle_4_clicked,
                          }
            # 連接圖形介面與訊號常數
            self.main_window.signal_autoconnect(events_dic)
    
            # 取得 widget 視窗的元件
            self.entry1 = self.main_window.get_widget("entry1") # entry1 為計算機鍵盤下方的元件名稱
            self.entry_res = self.main_window.get_widget("entry_result") # entry_res 為計算機鍵盤上方的元件名稱
            
            # 顯示
            self.window.show()              # 顯示圖形
            
        # 定義按鈕驅動函數
            
        def handle_haha_show(self, widget):
           self.entry1.set_text('yaya') 
           self.entry1.set_text('yaya')
        def handle_yaya_show(self, widget):
           self.entry1.set_text('haha') 
           self.entry1.set_text('haha')
        def on_button4_clicked(self, widget):
           self.entry_res.set_text('4') 
    
    if __name__ == '__main__':
        calc()                   
        gtk.main()                
    
    

好用連結

Attachments (4)

Download all attachments as: .zip