#!/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.pack_end(child, expand=True, fill=True, padding=0)
表示增加对象到容器box中。
创建一个新的横向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)
vbox = gtk.VBox(homogeneous=False, spacing=0)
gtk.HBox() 和gtk.VBox() 的homogeneous参数控制在box中的每个对象是否有相同的大小
sapcing和padding的不同之处在于:
当box被创建时,sapcing起作用,控制对象之前的距离
而对象被加入box时,padding起作用,控制对象的两边距离