#!/usr/bin/env python # -*- coding: utf-8 -*- import pygtk pygtk.require('2.0') import gtk class DeepFuture: def blogurlshow(self): print("我的博客是deepfuture.javaeye.com") def mynameshow(self): print("我是deepfuture") def buttonpress(self,widget, data): if data=="blog": self.blogurlshow() else: self.mynameshow() 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.set_title("2个按钮的窗口") #放入一个不可见的box,然后在里面放2个按钮,并设置回调 self.buttonbox = gtk.HBox(False, 0) self.window.add(self.buttonbox) self.blogbutton = gtk.Button("我的博客") self.namebutton = gtk.Button("我的名字") self.blogbutton.connect("clicked", self.buttonpress, "blog") self.namebutton.connect("clicked", self.buttonpress, "name") #加入box self.buttonbox.pack_start(self.blogbutton, True, True, 0) self.buttonbox.pack_start(self.namebutton, True, True, 0) #显示 self.blogbutton.show() self.namebutton.show() self.buttonbox.show() #指定窗口信号与相关处理事件 self.window.connect("delete_event", self.delwin_event) self.window.connect("destroy", self.destroy_win) self.window.set_border_width(15) #显示窗口 self.window.show() def main(self): gtk.main() if __name__ == "__main__": deep=DeepFuture() deep.main()
输出:
python test.py
我的博客是deepfuture.javaeye.com
我是deepfuture
delete event!
destroy event!
代码
box.pack_start(child, expand=True, fill=True, padding=0)
创建一个新的横向box,我们使用gtk.HBox(),对于纵向box,我们使用gtk.VBOX(),pack_start() 和 pack_end()用来在BOX这样的容器中放置对象,pack_start()从左到右或从上到下,pack_end()从右到左或从下到上
使用以下形式,将对象放入容器中:
box.pack_start(child, expand, fill, padding)
box是容器,child是被放置的对象,expand=True表示放完所有对象后,放入的对象将填充(将自己的尺寸放大)余下的box空间,False则不是。 fill=True表示余下的空间被对象自己填满,为False可以左右调整对象
当创建一个新的box,函数如下:
hbox = gtk.HBox(homogeneous=False, spacing=0)