免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5824 | 回复: 1

[有趣的Python 6] PyGtk中窗口的事件处理 [复制链接]

论坛徽章:
0
发表于 2005-06-08 08:31 |显示全部楼层
还记得我们上次的PyGtk的程序么。我们显示了一个光秃秃的窗口。而且不能关闭!呵呵。这样太不象话了。我们来看一个复杂一点的例子,顺便看一下PyGtk的事件处理机制:

  1. import gtk

  2. class Shell:
  3.     def __init__(self):
  4.         self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  5.         self.window.connect("destroy", self.destroy_event, None)
  6.         self.window.connect("delete_event", self.delete_event, None)
  7.         self.initContainer()
  8.         self.window.add(self.container)
  9.         self.container.show()
  10.         self.window.show()

  11.     def initContainer(self):
  12.         self.helloButton = gtk.Button("Hello World")
  13.         self.helloButton.connect("clicked", self.hello, None)

  14.         self.quitButton = gtk.Button("Quit")
  15.         self.quitButton.connect_object("clicked", gtk.Widget.destroy, self.window)
  16.         self.container = gtk.HBox()
  17.         self.container.add(self.helloButton)
  18.         self.container.add(self.quitButton)
  19.         self.helloButton.show()
  20.         self.quitButton.show()
  21.         return self.container

  22.     def delete_event(self, widget, event, data = None):
  23.         print "delete event caught"
  24.         return False

  25.     def destroy_event(self, widget, event, data = None):
  26.         print "destroy event caught"
  27.         gtk.main_quit()

  28.     def hello(self, widget, event, data=None):
  29.         print "Hello PyGtk World!"

  30.     def main(self):
  31.         gtk.main()

  32. print __name__
  33. if __name__ == "__main__":
  34.     shell = Shell()
  35.     shell.main()
复制代码

如果有Gtk编程经验的话,可以很容易读懂这段代码。其实Gtk的机制很简单,就是在某个widget上,为某一个特定的事件注册一个callback函数。当事件发生时,对应的callback事件会被调用。
对于delete_event,这个事件通常是由window manager来发出,点击窗口右上教的"X"就会触发这个事件。
对于connect_object(event, callback, widget)这个函数,其效果是这样的:

  1. callback(widget)
复制代码

会被调用。
在本例子里,gtk.Widget.destroy(self.window)会被调用。而gtk.Widget.destroy(widget)的作用是向widget发出destroy信号。如果widget注册了这个signal的callback,本例中是Shell.destroy_event()函数。结果是程序的退出。

论坛徽章:
0
发表于 2005-07-06 11:41 |显示全部楼层

[有趣的Python 6] PyGtk中窗口的事件处理

如何在一个notebook的页面内精确定位

notebook分为标签和页面两项,如何将他们标识出来,这样才能完成对他们的操作
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP