#!/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!