pygtk入门(2)-第二个窗口

 

#!/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)处理信号




pygtk入门(2)-第二个窗口
 

"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!