#!/usr/bin/env python # -*- coding: utf-8 -*- import pygtk pygtk.require('2.0') import gtk class DeepFuture: def blogurlshow(self,widget,data=None): print("我的博客:deepfuture.javaeye.com") def delwin_event(self,widget,event,data=None): #如果你在"delete_event"事件处理中,返回FALSE,GTK会继续发射这个信号,以供destroy,否则返回TRUE,表示这个信号已经被处理,不需要再处理了,也不需要再发射这个信号了,这意味着你不能destroy窗口。 print("delete event!") return False def destroy_win(self,widget,data=None): #处理窗口销毁信号 print("destroy event!") gtk.main_quit() def __init__(self): #创建一个新窗口 self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) #指定信号与相关处理事件 self.window.connect("delete_event", self.delwin_event) self.window.connect("destroy", self.destroy_win) self.window.set_border_width(15) self.button = gtk.Button("显示我的博客") self.button.connect("clicked", self.blogurlshow, None) self.button.connect_object("clicked", gtk.Widget.destroy,self.window) self.window.add(self.button) #显示按钮和相关窗口 self.button.show() self.window.show() def main(self): gtk.main() if __name__ == "__main__": deep=DeepFuture() deep.main()
object是GtkWidget的被释放信号的实例, name是要捕捉的信号名称 func是处理信号的函数, func_data是传递给函数的数据,handler_id 可以断开或阻塞这个处理
2)def callback_func(widget, callback_data):回调函数
第一参数是指向发送信号的widget,第二个参数callback_data指向connect() 方法的最后一个数据,如果回调函数是一个对象的方法,则使用
def callback_meth(self, widget, callback_data)
self是这个对象的实例包括的方法。
3)handler_id = object.connect_object(name, func, slot_object)
connect_object()和connect()相同,但回调函数仅使用一个参数和一个回调函数:
def callback_func(object)
def callback_meth(self, object)
通常对象为widget时,connect_object() 允许pygtk widget方法使用单个参数argument (self)处理信号
"delete_event" 和 "destroy" 信号被捕捉,"delete_event" 在我们使用窗口管理器关闭这个窗口后,或我们调用GtkWidget destroy() 后产生,delete_event"处理中,返回 FALSE,"destroy" 被捕捉:
self.window.connect("delete_event", self.delete_event)
self.window.connect("destroy", self.destroy)
我的博客:deepfuture.javaeye.com
destroy event!