zoukankan      html  css  js  c++  java
  • 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
     


    作者:半山
    出处:http://www.cnblogs.com/xdao/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    lua学习之环境搭建
    c易错点归纳
    H7-TOOS之SPI控制器功能
    搜索旋转排序数组
    电话号码的字母组合
    打家劫舍python实现
    括号生成实现
    玩烂bert--集成输出预测分类、特征向量、参数冻结、推理
    tensorflow 查看ckpt模型中参数值
    求柱状图中最大的矩形
  • 原文地址:https://www.cnblogs.com/xdao/p/lgob_menu_toobar_statusbar.html
Copyright © 2011-2022 走看看