您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > pygtk+glade3的入门教程
我使用的ubuntu,使用windows的朋友自己搜索安装一下。python入门挺简单的,而且跨平台,十分不错。我主要学习java,python是一门后备语言。这段时间以来我写了一些简答的python程序,都是命令行的,但是我喜欢Gui界面的。想将这些程序改写成Gui界面,搜索了一下,基本有pygtk、WxPython、PyQT、Tkinter这四种,比较了一下,选择了pygtk。从网上查了查,发现可以使用glade来设计GUI界面,这样我更喜欢了。于是安装了glade3和pygtk相关的库。使用了例子程序:#!/usr/bin/envpython#-*-encoding:utf-8-*-importpygtkimportgtkimportgtk.gladegladefile='3.glade'wTree=gtk.glade.XML(gladefile)wTree.get_widget('MainWindow').show()gtk.main()这时出问题了,程序报错:(test.py:8109):libglade-WARNING**:Expectedglade-interface.Gotinterface.(test.py:8109):libglade-WARNING**:didnotfinishinPARSER_FINISHstateTraceback(mostrecentcalllast):File/home/xxxx/workspace/gtk/src/test.py。。。。。wTree=gtk.glade.XML(gladefile)RuntimeError:couldnotcreateGladeXMLobject这个错误很郁闷,网上的教程都没提,人家的程序直接过去,而我的就不行,经过不断的测试终于发现文件题的所在,在于glade格式化文件的格式上。glade有两种格式,见下图:经过我的测试,如果在编辑--》首选项里选择GtkBuilder就会报这个错误,而选择Libglade就不会。Ok!这个问题解决了,以下的都好办了。我接着贴我修改后的程序:#!/usr/bin/envpython#-*-encoding:utf-8-*-importpygtkimportgtkimportgtk.gladedefOKbutton_clicked(widget):printhelloglade!defMainWindow_delete_event(event,widget):print退出!returnFalsedefrun():gladefile='5.glade'wTree=gtk.glade.XML(gladefile)dic={'on_OKButton_clicked':OKbutton_clicked}wTree.signal_autoconnect(dic)wTree.get_widget('MainWindow').show()if__name__==__main__:run()gtk.main()其实只是多了这一句:dic={'on_OKButton_clicked':OKbutton_clicked}这句的意思是将defOKbutton_clicked(widget):这个函数给绑定了,当发生on_OKButton_clicked这个动作时,执行defOKbutton_clicked(widget):printhelloglade!这个函数。那么,这个on_OKButton_clicked在那里呢,其实这个已经在pygtk里定义好了。但是我们不知道阿,看名字大概可以知道是干什么的,但是这个名字怎么来,让我们去查文档?不必了,虽然可以。其实这个定义在glade生成的glade文件里,其实就是一个xml文件。看我现在的glade文件中的相关一部分:childwidgetclass=GtkButtonid=OKButtonpropertyname=labeltranslatable=yesbutton/propertypropertyname=width_request100/propertypropertyname=height_request80/propertypropertyname=visibleTrue/propertypropertyname=can_focusTrue/propertypropertyname=receives_defaultTrue/propertysignalname=clickedhandler=on_OKButton_clicked//widgetpackingpropertyname=x150/propertypropertyname=y73/property/packing/child就是:signalname=clickedhandler=on_OKButton_clicked/这一句了。on_OKButton_clicked在这里。glade的这一句又是怎么生成的呢?看图:哈哈,都在这里,现在知道了吧。如果想要对一个已定义的组建进行操作,该怎么做呢?也是很简单的,如:定义一个button:widgetclass=GtkButtonid=OKButton这个只是第一句,一下的省略。只要这样就可以了:OKButton=wTree.get_widget('OKButton')
本文标题:pygtk+glade3的入门教程
链接地址:https://www.777doc.com/doc-2847571 .html