使用PyGTK和Glade创建用户界面(part 2)


原文

接上篇:)
   接下来就要把这个按钮的点击事件和一个函数关联起来. 我们需要再次使用Glade编辑界面来实现这个功能.
   首先在主窗口中选中这个按钮对象然后再在属性窗口中选择”信号”标签页. 在这里我们需要通过点击信息浏览按钮(…)然后选择”Clicked”来添加一个信号.这就默认创建了一个名字为”on_btnHelloWorld_clicked”的处理器”. 我们可以修改这个处理器的名字但是现在使用默认的名字就可以了.

  Glade的工作到此就结束了. 现在我们需要把这个事件和在代码中一些东西关联起来. 很幸运的是这个可以很简单的用
gtk.glade.XML.signal_autoconnect
函数来实现.
#Create our dictionay and connect it
dic = { "on_btnHelloWorld_clicked" : self.btnHelloWorld_clicked,
        "on_MainWindow_destroy" : gtk.main_quit }
self.wTree.signal_autoconnect(dic)
简单的讲, 这个词典是由事件名和所要关联的函数构成的. 你可以看到我们把按钮的点击事件和一个函数关联起来,然后再把”on_MainWindow_destory”事件和gtk.mainquit()函数关联起来. 这个是我们原来在关闭掉窗口时程序代码的一个替换, 如果你还想使用原来的词典, 你应当在glade中为主窗口添加一个destory事件.
   下一件事就是为类HeloowWolrdGTK创建btnHelloWorld_clicked函数:
def btnHelloWorld_clicked(self, widget):
        print "Hello World!"
真是太简单了! 现在当你运行它的时候, 点击一下”Click Me!”按钮你可以看到在命令行中输出了”Hello World!”.
这就是本节课的内容, 但是现在我真的喜欢上了使用PyGTK和Glade工作. 下面是完整的程序代码:
#!/usr/bin/env python
import sys
try:
        import pygtk
          pygtk.require("2.0")
except:
          pass
try:
        import gtk
          import gtk.glade
except:
        sys.exit(1)
class HellowWorldGTK:
        """This is an Hello World GTK application"""
        def __init__(self):
               
                #Set the Glade file
                self.gladefile = "pyhelloworld.glade"  
                self.wTree = gtk.glade.XML(self.gladefile)
               
                #Create our dictionay and connect it
                dic = { "on_btnHelloWorld_clicked" : self.btnHelloWorld_clicked,
                        "on_MainWindow_destroy" : gtk.main_quit }
                self.wTree.signal_autoconnect(dic)
        def btnHelloWorld_clicked(self, widget):
                print "Hello World!"
if __name__ == "__main__":
        hwg = HellowWorldGTK()
        gtk.main()
有用的链接:
http://www.linuxjournal.com/article/6586
http://www.async.com.br/~kiko/pygtk-web/articles/bitpodder/BitPodder.htm
ht
[url=tp://www.linuxjournal.com/article/7421]tp://www.linuxjournal.com/article/7421[/url]
http://www.pygtk.org/articles.html
http://www.pygtk.org/tutorial.html