PyGTK - Lớp EventBox
Một số widget trong bộ công cụ PyGTK không có cửa sổ riêng. Các vật dụng không có cửa sổ như vậy không thể nhận tín hiệu sự kiện. Các vật dụng như vậy, ví dụ một nhãn, nếu được đặt bên trong hộp sự kiện có thể nhận được tín hiệu.
EventBox là một vùng chứa vô hình cung cấp cửa sổ cho các vật dụng không cửa sổ. Nó có một hàm tạo đơn giản mà không có bất kỳ đối số nào -
gtk.EventBox()
Thí dụ
Trong ví dụ sau, hai widget của gtk.EventBox được đặt trong cửa sổ cấp trên. Bên trong mỗi hộp sự kiện, một nhãn được thêm vào. Hộp sự kiện hiện được kết nối với một hàm gọi lại để xử lý button_press_event trên đó. Vì bản thân hộp sự kiện là vô hình nên sự kiện xảy ra trên nhãn được nhúng một cách hiệu quả. Do đó, khi chúng ta nhấp vào bất kỳ nhãn nào, hàm gọi lại tương ứng sẽ được gọi.
Quan sát mã -
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()
Đoạn mã trên tạo ra kết quả sau:
Khi nhãn 1 được nhấp vào bảng điều khiển, thông báo "nhãn 1 được nhấp" sẽ được in. Tương tự, khi nhãn 2 được nhấp vào, thông báo "nhãn được nhấp 2" sẽ được in.