PyGTK - EventBox 類



PyGTK 工具包中的一些部件沒有自己的視窗。這些無視窗部件無法接收事件訊號。例如,標籤這種部件,如果放在 EventBox 中,就可以接收訊號。

EventBox 是一個不可見的容器,它為無視窗部件提供視窗。它有一個簡單的建構函式,沒有任何引數:

gtk.EventBox()

示例

在下面的示例中,兩個 gtk.EventBox 部件被放置在頂級視窗中。在每個 EventBox 內部,添加了一個標籤。現在,EventBox 連線到一個回撥函式,以處理其上的 button_press_event 事件。由於 EventBox 本身是不可見的,因此實際上事件發生在嵌入的標籤上。因此,當我們點選任何標籤時,都會呼叫相應的回撥函式。

觀察程式碼:

import gtk

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("EventBox demo")
      self.set_size_request(200,100)
      self.set_position(gtk.WIN_POS_CENTER)
      fixed = gtk.Fixed()
      
      event1 = gtk.EventBox()
      label1 = gtk.Label("Label 1")
      event1.add(label1)
      fixed.put(event1, 80,20)
      
      event1.connect("button_press_event",self.hello1)
      event2 = gtk.EventBox()
      label2 = gtk.Label("Label 2")
      event2.add(label2)
      event2.connect("button_press_event",self.hello2)
      fixed.put(event2, 80,70)
      
      self.add(fixed)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
		
   def hello1(self, widget, event):
      print "clicked label 1"
		
   def hello2(self, widget, event):
      print "clicked label 2"

PyApp()
gtk.main()

以上程式碼生成以下輸出:

EventBox Demo

當在控制檯中點選“標籤 1”時,會列印訊息“clicked label 1”。類似地,當點選“標籤 2”時,會列印訊息“clicked label 2”。

廣告

© . All rights reserved.