wails中的菜单
qingheluo2024-08-27清河洛365
在wails中,菜单相关实现在"github.com/wailsapp/wails/v2/pkg/menu"包中定义type menu.Menu表示一个包含若干菜单元素的菜单
type Menu struct {
Items []*MenuItem
}
创建菜单
NewMenu() *Menu :创建一个空菜单
NewMenuFromItems(first *MenuItem, rest ...*MenuItem) *Menu
菜单实例的常用方法
Append(item *MenuItem) 添加一个菜单元素
Merge(menu *Menu) 添加一个菜单中的所...
在wails中,菜单相关实现在"github.com/wailsapp/wails/v2/pkg/menu"包中定义
type menu.Menu
表示一个包含若干菜单元素的菜单
type Menu struct { Items []*MenuItem }
创建菜单
NewMenu() *Menu :创建一个空菜单 NewMenuFromItems(first *MenuItem, rest ...*MenuItem) *Menu
菜单实例的常用方法
Append(item *MenuItem) 添加一个菜单元素 Merge(menu *Menu) 添加一个菜单中的所有元素 AddText(label string, accelerator *keys.Accelerator, click Callback) *MenuItem // 创建一个文本菜单并添加至菜单,最后返回该菜单元素 AddCheckbox(label string, checked bool, accelerator *keys.Accelerator, click Callback) *MenuItem AddRadio(label string, checked bool, accelerator *keys.Accelerator, click Callback) *MenuItem AddSeparator() AddSubmenu(label string) *Menu Prepend(item *MenuItem) // 添加item至子菜单中并把item作为第一个元素
type menu.MenuItem
表示一个菜单中的菜单元素
type MenuItem struct { Label string Role Role // 菜单的类型,仅Mac支持 type Role int const ( AppMenuRole Role = 1 EditMenuRole = 2 WindowMenuRole = 3 } Accelerator *keys.Accelerator // 绑定快捷键 Type Type // 菜单元素类型 type Type string const ( TextType Type = "Text" SeparatorType Type = "Separator" SubmenuType Type = "Submenu" CheckboxType Type = "Checkbox" RadioType Type = "Radio" ) "Submenu"表示一个子菜单入口,此类菜单元素可以包含其他菜单元素作为子菜单 Disabled bool Hidden bool Checked bool // 表示该菜单元素是否已选中,仅限Checkbox and Radio SubMenu *Menu // 子菜单 Click Callback // 设置点击后的回调函数 type Callback func(*CallbackData) type CallbackData struct { MenuItem *MenuItem } 函数接收一个CallbackData,指示哪个菜单项触发了回调 }
创建一个菜单元素
文本类型菜单元素 Label(label string) *MenuItem Text(label string, accelerator *keys.Accelerator, click Callback) *MenuItem 分割线 Separator() *MenuItem 单选 Radio(label string, selected bool, accelerator *keys.Accelerator, click Callback) *MenuItem 多选 Checkbox(label string, checked bool, accelerator *keys.Accelerator, click Callback) *MenuItem 子菜单 SubMenu(label string, menu *Menu) *MenuItem
菜单元素的方法
IsSeparator() bool IsCheckbox() bool IsRadio() bool SetLabel(name string) Disable() *MenuItem Enable() *MenuItem OnClick(click Callback) *MenuItem SetAccelerator(acc *keys.Accelerator) *MenuItem SetChecked(value bool) *MenuItem // 如果该菜单元素类型不是RadioType则自动设置为CheckboxType Hide() *MenuItem Show() *MenuItem 子菜单相关 Parent() *MenuItem // 获取一个菜单元素的父菜单元素 Append(item *MenuItem) bool // 将item添加到此项目的子菜单中,此菜单元素不是SubmenuType返回false Prepend(item *MenuItem) bool // 将item添加为此项目的子菜单第一项,此菜单元素不是SubmenuType类型返回false Remove() // 从此菜单的父菜单中删除此项 InsertAfter(item *MenuItem) bool // 尝试将item作为子菜单项添加到此项之后,此项没有父菜单返回false InsertBefore(item *MenuItem) bool // 尝试将item作为子菜单项添加到此项之前,此项没有父菜单返回false
type keys.Accelerator
用于绑定菜单元素的快捷键,在"github.com/wailsapp/wails/v2/pkg/menu/keys"包中定义
type Accelerator struct { Key string Modifiers []Modifier }
Key表示按键,多个按键使用加号(+)连接
Key字符串的解析过程
1、转化为小写 2、使用加号(+)将字符串分割为切片 3、使用循环解析每个切片元素 4、每个切片元素的长度除了已经定义的字符串外只能长度为1 已定义的按键字符串 "f1", "f2", ..., "f35" "space", "tab", "delete", "backspace" "return", "enter", "escape", "numlock" "left", "right", "up", "down", "home", "end" "page up", "page down" "plus" //由于加号(+)有特殊意义,使用plus表示加号(+)按键
Modifier表示按键修饰符,有ctrl、alt、shift和win四个
type Modifier string const ( CmdOrCtrlKey Modifier = "cmdorctrl" // Mac上的Command或其他平台的ctrl OptionOrAltKey Modifier = "optionoralt" // Mac上的Option或其他平台的alt ShiftKey Modifier = "shift" // shift // SuperKey Modifier = "super" // Mac上的Command或其他平台的win // 该常量源码中处于注释状态,不可用 ControlKey Modifier = "ctrl" // ctrl )
我们可以通过创建结构体示例的方式创建*keys.Accelerator,也可以通过已经定义的函数来创建
Key(key string) *Accelerator // 没有修饰符 CmdOrCtrl(key string) *Accelerator OptionOrAlt(key string) *Accelerator Shift(key string) *Accelerator Control(key string) *Accelerator Combo(key string, modifier1 Modifier, modifier2 Modifier, rest ...Modifier) *Accelerator 创建两个及两个以上修饰符的快捷键 // Super(key string) *Accelerator // 源码中注释的方法