附件文件
gtkButton.glade
gtkButton.py
试验目的
Glade Button 控件的使用与Python的事件绑定
试验过程
打开 Glade
创建窗体
名称:MainWindow
标题:Hello World
创建表格控件(GtkTable)
所有属性默认
创建Lable控件(GtkLabel)
名称:label1
标签: Hello World preen 'Exit' button to exit application
创建Button控件(GtkButton)
名称:button1
调整文件格式
菜单 编辑->首选项
将 Project file format 与 gtk catalog属性设置为 图中选项
注:当Project file format 为 GtkBuilder时,Python总是提示没法创建对象,
试验:将文件另存为 GtkBuilder 格式 对比 Libglade的不同点 并手动修改不同的地方,然后再载入Python,检查是否成功
定义 Glade 事件
窗体 destroy 事件
按键 clicked 事件
打开Python Shell
菜单-File-New Windows
输入以下代码 (代码解释)
1 import os #载入OS库
2 import sys #载入 SYS 库
3 import pygtk #载入 pygtk 库
4 import gtk #载入 gtk 库
5 import gtk.glade #载入 gtk.glade
6 class gtkButton: #定义一个类
7 wTree = None #声明一个变量
8 def delete_event(self,widget,event,data=None): #定义一个方法
#return gtk.FALSE
9 pass
10 def destroy(self,widget,data=None): #定义窗体释放事件
11 gtk.main_quit()
12 def __init__( self ):
13 self.wTree = gtk.glade.XML( "gtkButton.glade" ) #载入glade文件
14 self.window=self.wTree.get_widget("MainWindow") #取得窗体对象 “MainWindow”名
#称要与Glade一致
#声明事件组 Button clicked 与 窗体destory
15 dic = {"on_button1_clicked":self.btExit,
"on_MainWindow_destroy":self.destroy} self.wTree.signal_autoconnect(dic)
16 self.window.show() #窗体显示
17 gtk.main() #进入窗体循环事件
18 def btExit(self, widget): #定义按键onclick事件
19 sys.exit(0) #退出程序
20 _gtkButton = gtkButton()
gtkButton.glade
<?xml version="1.0"?> <glade-interface> <!-- interface-requires gtk+ 2.16 --> <!-- interface-naming-policy project-wide --> <widget class="GtkWindow" id="MainWindow"> <property name="title" translatable="yes">Hello World</property> <property name="window_position">center</property> <property name="default_width">640</property> <property name="default_height">480</property> <signal name="destroy" handler="on_MainWindow_destroy"/> <child> <widget class="GtkTable" id="table1"> <property name="visible">True</property> <property name="n_rows">3</property> <property name="n_columns">3</property> <child> <widget class="GtkButton" id="button1"> <property name="label" translatable="yes">Exit </property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <signal name="clicked" handler="on_button1_clicked"/> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> </packing> </child> <child> <widget class="GtkLabel" id="label1"> <property name="visible">True</property> <property name="label" translatable="yes">Hello World preen 'Exit' button to exit application</property> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> </packing> </child> <child> <placeholder/> </child> <child> <placeholder/> </child> <child> <placeholder/> </child> <child> <placeholder/> </child> <child> <placeholder/> </child> <child> <placeholder/> </child> <child> <placeholder/> </child> </widget> </child> </widget> </glade-interface>
gtkButton.py
import os import sys import pygtk import gtk import gtk.glade class gtkButton: wTree = None def delete_event(self,widget,event,data=None): #return gtk.FALSE pass def destroy(self,widget,data=None): gtk.main_quit() def __init__( self ): self.wTree = gtk.glade.XML( "gtkButton.glade" ) self.window=self.wTree.get_widget("MainWindow") dic = {"on_button1_clicked":self.btExit, "on_MainWindow_destroy":self.destroy} self.wTree.signal_autoconnect(dic) self.window.show() gtk.main() def btExit(self, widget): sys.exit(0) _gtkButton = gtkButton()