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

    前面已经介绍了如何使用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
 1 require('lgob.gtk')
 2 require('lgob.gdk')--键盘,图标等会用到gdk
 3 require('gdkkey') --lgob中没找到键盘的键值,这事我从c的头文件中得到的
 4 
 5 --加载图标 如图三,会在任务栏显示
 6 logo=gdk.Pixbuf.new_from_file("icon.png")
 7 
 8   
 9 
10 window =gtk.Window.new(gtk.WINDOW_TOPLEVEL)
11 window:set('title', "lgob测试", 'window-position', gtk.WIN_POS_CENTER)
12 window:set('default-width',400,'default-height',300)
13 window:set_icon(logo)
14 window:connect('delete-event', gtk.main_quit)
15 
16 --菜单的创建
17 
18 --1 创建菜单栏
19 menubar=gtk.MenuBar.new();
20 
21 -- 2创建菜单项
22 --使用mnemonic可以使用alt+x快捷键x为_X中的第一个字母
23 file_item = gtk.MenuItem.new_with_mnemonic("_File") 
24 menubar:append(file_item)--顶层菜单
25 open_item=gtk.MenuItem.new_with_label("open")
26 save_item = gtk.MenuItem.new_with_label("Save")
27 autosave_item=gtk.CheckMenuItem.new_with_label("autosave") --带选择的菜单如图二
28 quit_item = gtk.ImageMenuItem.new_from_stock("gtk-quit") --从stock创建
29 --在devhelp中搜索stock items 可以看到各种stock,lgob的命名只是把"GTK_STOCK_XXX"换成了"gtk-xxx"
30 
31 --3 创建菜单 添加菜单项
32 filemenu=gtk.Menu.new()
33 filemenu:append(open_item)
34 filemenu:append(save_item)
35 filemenu:append(autosave_item)
36 filemenu:append(gtk.SeparatorMenuItem.new()) --分隔符
37 filemenu:append(quit_item)
38 
39 --4把menu添加到顶层菜单
40 file_item:set_submenu(filemenu)
41 
42 --菜单的信号是activate 
43 open_item:connect('activate',function() print("open") end) --匿名函数
44 quit_item:connect('activate',gtk.main_quit)
45 
46 --快捷键
47 accel  = gtk.AccelGroup.new()
48 open_item:add_accelerator('activate',accel,GDK.KEY_a,gdk.CONTROL_MASK,gtk.ACCEL_VISIBLE)
49 
50 --状态栏
51 statusbar = gtk.Statusbar.new()
52 statusbar:push(1,"autosave info:".."not active")
53 
54 function setstatusbar() 
55     if (autosave_item:get_active()) then
56         statusbar:push(1,"autosave info:".."active")
57     else
58         statusbar:push(1,"autosave info:".."not active")
59     end
60 end
61 autosave_item:connect('activate',setstatusbar)
62 
63 --工具栏
64 toolbar= gtk.Toolbar.new()
65 toolbar:set_style(gtk.TOOLBAR_ICONS)
66 newtb = gtk.ToolButton.new_from_stock("gtk-new")
67 opentb = gtk.ToolButton.new_from_stock("gtk-open")
68 savetb = gtk.ToolButton.new_from_stock("gtk-save")
69 sep = gtk.SeparatorToolItem.new()
70 quittb = gtk.ToolButton.new_from_stock("gtk-quit")
71 toolbar:insert(newtb, 0)
72 toolbar:insert(opentb, 1)
73 toolbar:insert(savetb, 2)
74 toolbar:insert(sep, 3)
75 toolbar:insert(quittb, 4)
76 
77 quittb:connect("clicked", gtk.main_quit)
78 
79 
80 vbox = gtk.VBox.new(false, 5)
81 vbox:pack_start(menubar, false, false, 0)
82 vbox:pack_start(toolbar,false,false,0)
83 vbox:pack_end(statusbar,false, false, 0)
84 window:add(vbox)
85 window:add_accel_group(accel)
86 window:show_all()
87 
88 gtk.main()

 gdkkey.lua

 1 --GDK 键值从c #include <gdk/gdkkeysyms.h>中得到
 2 GDK={}
 3 GDK["KEY_a"]=0x061
 4 GDK["KEY_b"]=0x062
 5 GDK["KEY_c"]=0x063
 6 GDK["KEY_d"]=0x064
 7 GDK["KEY_e"]=0x065
 8 GDK["KEY_f"]=0x066
 9 GDK["KEY_g"]=0x067
10 GDK["KEY_h"]=0x068
11 GDK["KEY_i"]=0x069
12 GDK["KEY_j"]=0x06a
13 GDK["KEY_k"]=0x06b
14 GDK["KEY_l"]=0x06c
15 GDK["KEY_m"]=0x06d
16 GDK["KEY_n"]=0x06e
17 GDK["KEY_o"]=0x06f
18 GDK["KEY_p"]=0x070
19 GDK["KEY_q"]=0x071
20 GDK["KEY_r"]=0x072
21 GDK["KEY_s"]=0x073
22 GDK["KEY_t"]=0x074
23 GDK["KEY_u"]=0x075
24 GDK["KEY_v"]=0x076
25 GDK["KEY_w"]=0x077
26 GDK["KEY_x"]=0x078
27 GDK["KEY_y"]=0x079
28 GDK["KEY_z"]=0x07a

 

 
posted @ 2012-11-13 06:56  半山th  阅读(1053)  评论(0编辑  收藏  举报