前面已经介绍了如何使用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添加到顶层菜单中
但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)添加提示消息
具体请看截图和代码
![](https://images.cnblogs.com/cnblogs_com/xdao/201211/201211130655446559.png)
图一
图二 图三
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