## page was renamed from zhArticleTemplate ##language:zh #pragma section-numbers on ''' 含有章节索引的中文 文章模板 ''' ::-- ehu4ever [<>] <> = 五花八门的事件 = 除了上个章节所说的“信号发生处理机制”,“X事件响应机制”里还有一大堆的“事件”:“回调函数”也是用来响应这些事件的。 这些事件是: {{{ event button_press_event button_release_event scroll_event motion_notify_event delete_event destroy_event expose_event key_press_event key_release_event enter_notify_event leave_notify_event configure_event focus_in_event focus_out_event map_event unmap_event property_notify_event selection_clear_event selection_request_event selection_notify_event proximity_in_event proximity_out_event visibility_notify_event client_event no_expose_event window_state_even }}} 为了使我们的“callback”能够响应这些事件,就要用到connect(),就像上个章节所说的那样,把事件的名称作为name参数传入“callback”。用于响应“事件”的callback和响应“事件信号”的callback是不一样的。 {{{ def callback_func(widget, event, callback_data ): def callback_meth(self, widget, event, callback_data ): {{{ GdkEvent是一个python对象,是他的type属性告诉我们到底发生了什么“事件”。“事件”的另外一些属性依赖于type属性。type的值一般有这么一些: {{{ NOTHING DELETE DESTROY EXPOSE MOTION_NOTIFY BUTTON_PRESS _2BUTTON_PRESS _3BUTTON_PRESS BUTTON_RELEASE KEY_PRESS KEY_RELEASE ENTER_NOTIFY LEAVE_NOTIFY FOCUS_CHANGE CONFIGURE MAP UNMAP PROPERTY_NOTIFY SELECTION_CLEAR SELECTION_REQUEST SELECTION_NOTIFY PROXIMITY_IN PROXIMITY_OUT DRAG_ENTER DRAG_LEAVE DRAG_MOTION DRAG_STATUS DROP_START DROP_FINISHED CLIENT_EVENT VISIBILITY_NOTIFY NO_EXPOSE SCROLL WINDOW_STATE SETTING }}} 以上这些东东归gtk.gdk管,比如gtk.gtk.DRAG_ENTER。 下面我们把callback和event边起来,就像这样: {{{ button.connect("button_press_event", button_press_callback) }}} 上面的button是一个GtkWidget。这样,当鼠标在这个button按了一下,button_press_callback就被调用了。这个button_press_callback的定义可能是这样的: {{{ def button_press_callback(widget, event, data ): }}} 这个callback的返回值决定了还要不要继续处理其它事件,返回True表示打完收功,而False表示继续standby。想知道更详细,请看这里:'''[[self:pygtk_adhandling|Advanced Event and Signal Handling]]''' The GDK selection and drag-and-drop APIs also emit a number of events which are reflected in GTK+ by signals. See Section 22.3.2, “Signals On the Source Widget” and Section 22.3.4, “Signals On the Destination Widget” for details on the signatures of the callback functions for these signals: {{{ selection_received selection_get drag_begin_event drag_end_event drag_data_delete drag_motion drag_drop drag_data_get drag_data_received }}}