您的位置:首页 > 编程语言 > Go语言

lgob创建菜单栏_工具栏和状态栏

2012-11-13 06:56 309 查看
前面已经介绍了如何使用button,label,entry,这一章介绍lgob创建菜单栏_工具栏和状态栏.

如果你学过java会觉得gtk创建菜单栏很怪,如果没有,那恭喜你了.下面是创建菜单栏的过程
一 与菜单相关的部件有MenuBar, Menu,MenuItem.
MenuBar和Menu都是MenuItem的容器
但MenuBar不是Menu 的容器,Menu可以是MenuItem的子菜单
创建菜单的方法是
1. 使用gtk.MenuBar.new()创建菜单栏
2. 使用gtk.MenuItem.new()创建菜单项,其中顶层菜单也是菜单项的一种,使用menubar:append(topitem),把顶层菜单项添加到菜单栏中
3. 使用gtk.Menu.new()创建菜单项的容器,把非顶层菜单项使用menu:append(item)添加到Menu中
4. 使用menuitem:set_submenu(menu)把Menu添加到顶层菜单中

当然还有其他属性设置

当然理解后,你也可以修改顺序.

二 与工具栏相关的部件有Toolbar,ToolButton
1 使用gtk.Toolbar.new()创建工具栏
2 使用gtk.ToolButton.new_from_stock(stock) 或gtk.ToolItem.new()创建工具按钮
3 使用toobar:insert(button/item,index)把工具按钮添加到工具栏
当然还有其他属性设置,注意stock命名格式为原c格式GTK_STOCK_ABOUT,lgob格式 gtk-about,在devhelp里搜索Stock Items
可以查询所有stock

与状态栏相关的部件有Statusbar
1 使用gtk.Statusbar.new()创建状态栏
2 使用stausbar.push(index,messaage)添加提示消息

具体请看截图和代码



图一





图二 图三

test.lua

require('lgob.gtk')
require('lgob.gdk')--键盘,图标等会用到gdk
require('gdkkey') --lgob中没找到键盘的键值,这事我从c的头文件中得到的

--加载图标 如图三,会在任务栏显示
logo=gdk.Pixbuf.new_from_file("icon.png")

window =gtk.Window.new(gtk.WINDOW_TOPLEVEL)
window:set('title', "lgob测试", 'window-position', gtk.WIN_POS_CENTER)
window:set('default-width',400,'default-height',300)
window:set_icon(logo)
window:connect('delete-event', gtk.main_quit)

--菜单的创建

--1 创建菜单栏
menubar=gtk.MenuBar.new();

-- 2创建菜单项
--使用mnemonic可以使用alt+x快捷键x为_X中的第一个字母
file_item = gtk.MenuItem.new_with_mnemonic("_File")
menubar:append(file_item)--顶层菜单
open_item=gtk.MenuItem.new_with_label("open")
save_item = gtk.MenuItem.new_with_label("Save")
autosave_item=gtk.CheckMenuItem.new_with_label("autosave") --带选择的菜单如图二
quit_item = gtk.ImageMenuItem.new_from_stock("gtk-quit") --从stock创建
--在devhelp中搜索stock items 可以看到各种stock,lgob的命名只是把"GTK_STOCK_XXX"换成了"gtk-xxx"

--3 创建菜单 添加菜单项
filemenu=gtk.Menu.new()
filemenu:append(open_item)
filemenu:append(save_item)
filemenu:append(autosave_item)
filemenu:append(gtk.SeparatorMenuItem.new()) --分隔符
filemenu:append(quit_item)

--4把menu添加到顶层菜单
file_item:set_submenu(filemenu)

--菜单的信号是activate
open_item:connect('activate',function() print("open") end) --匿名函数
quit_item:connect('activate',gtk.main_quit)

--快捷键
accel  = gtk.AccelGroup.new()
open_item:add_accelerator('activate',accel,GDK.KEY_a,gdk.CONTROL_MASK,gtk.ACCEL_VISIBLE)

--状态栏
statusbar = gtk.Statusbar.new()
statusbar:push(1,"autosave info:".."not active")

function setstatusbar()
if (autosave_item:get_active()) then
statusbar:push(1,"autosave info:".."active")
else
statusbar:push(1,"autosave info:".."not active")
end
end
autosave_item:connect('activate',setstatusbar)

--工具栏
toolbar= gtk.Toolbar.new()
toolbar:set_style(gtk.TOOLBAR_ICONS)
newtb = gtk.ToolButton.new_from_stock("gtk-new")
opentb = gtk.ToolButton.new_from_stock("gtk-open")
savetb = gtk.ToolButton.new_from_stock("gtk-save")
sep = gtk.SeparatorToolItem.new()
quittb = gtk.ToolButton.new_from_stock("gtk-quit")
toolbar:insert(newtb, 0)
toolbar:insert(opentb, 1)
toolbar:insert(savetb, 2)
toolbar:insert(sep, 3)
toolbar:insert(quittb, 4)

quittb:connect("clicked", gtk.main_quit)

vbox = gtk.VBox.new(false, 5)
vbox:pack_start(menubar, false, false, 0)
vbox:pack_start(toolbar,false,false,0)
vbox:pack_end(statusbar,false, false, 0)
window:add(vbox)
window:add_accel_group(accel)
window:show_all()

gtk.main()


gdkkey.lua

--GDK 键值从c #include <gdk/gdkkeysyms.h>中得到
GDK={}
GDK["KEY_a"]=0x061
GDK["KEY_b"]=0x062
GDK["KEY_c"]=0x063
GDK["KEY_d"]=0x064
GDK["KEY_e"]=0x065
GDK["KEY_f"]=0x066
GDK["KEY_g"]=0x067
GDK["KEY_h"]=0x068
GDK["KEY_i"]=0x069
GDK["KEY_j"]=0x06a
GDK["KEY_k"]=0x06b
GDK["KEY_l"]=0x06c
GDK["KEY_m"]=0x06d
GDK["KEY_n"]=0x06e
GDK["KEY_o"]=0x06f
GDK["KEY_p"]=0x070
GDK["KEY_q"]=0x071
GDK["KEY_r"]=0x072
GDK["KEY_s"]=0x073
GDK["KEY_t"]=0x074
GDK["KEY_u"]=0x075
GDK["KEY_v"]=0x076
GDK["KEY_w"]=0x077
GDK["KEY_x"]=0x078
GDK["KEY_y"]=0x079
GDK["KEY_z"]=0x07a
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: