PyGTK - 訊號處理



與以順序方式執行的控制檯模式應用程式不同,基於 GUI 的應用程式是事件驅動的。gtk.main() 函式啟動一個無限迴圈。發生在 GUI 上的事件被傳遞到相應的回撥函式。

每個 PyGTK 小部件(派生自 GObject 類)都設計為響應一個或多個事件發出“訊號”。訊號本身不執行任何操作。相反,它“連線”到一個回撥函式。

一些訊號由小部件繼承,而一些訊號則是特定於小部件的。例如,"toggled" 訊號由 toggleButton 小部件發出。

訊號處理程式透過呼叫 gtk.widget 類的connect() 方法來設定。

handler_id = object.connect(name, func, func_data)
  • 第一個引數name是一個包含要捕獲的訊號名稱的字串。

  • 第二個引數func是捕獲訊號時要呼叫的回撥函式。

  • 第三個引數func_data是要傳遞給此函式的資料。

  • 處理程式 ID,用於唯一標識回撥方法。

例如,要在單擊按鈕時呼叫 onClicked() 函式,請使用以下語法:

btn.connect("clicked",onClicked,None)

onClicked() 函式定義如下:

def onClicked(widget, data=None):

如果回撥方法是物件方法,則它會接收 self 作為附加引數:

def onClicked(self, widget, data=None):

示例

在以下示例中,一個 Button 被新增到 gtk.Window 中。“Hello World”訊息在單擊按鈕時列印。

import gtk
class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Hello World in PyGTK")
      self.set_default_size(400,300)
      self.set_position(gtk.WIN_POS_CENTER)
		
      self.label = gtk.Label("Enter name")
      self.entry = gtk.Entry()
		
      self.btn = gtk.Button("Say Hello")
      self.btn.connect("clicked",self.hello)
		
      fixed = gtk.Fixed()
      fixed.put(self.label, 100,100)
      fixed.put(self.entry, 100,125)
      fixed.put(self.btn,100,150)
		
      self.add(fixed)
      self.show_all()
		
   def hello(self,widget):
      print "hello",self.entry.get_text()
PyApp()
gtk.main()

從 Python 提示符執行以上程式碼。將顯示以下輸出:

Signal Handling

按下按鈕時,控制檯會顯示以下輸出:

Hello TutorialsPoint
廣告

© . All rights reserved.