Go言語 - WALKでGUI - Menu
Menuの使用例。以下の構造のメニューを作成しました。
File Else ├ Open └ About ├ SubMenu | └ SubItem1 └ Exit
MainWinsdowのMenuItemsフィールドにMenuウィジェットを階層的に置いていき末端の項目にはActionウィジェットを置いています。
各ActionのOnTriggeredフィールドには処理のメソッド名を記載しますが、Exitメニュ項目のみ直接関数を記載しています。
package main import ( "github.com/lxn/walk" . "github.com/lxn/walk/declarative" ) import ( "fmt" "os" ) type MyMainWindow struct { *walk.MainWindow edit *walk.TextEdit } func main() { mw := &MyMainWindow {} MW := MainWindow{ AssignTo: &mw.MainWindow, Title: "Menuテスト", MinSize: Size {150, 200}, Size : Size {300, 300}, Layout: VBox {}, MenuItems: []MenuItem{ Menu{ Text: "&File", Items: []MenuItem{ Action{ Text: "&Open", OnTriggered: mw.menuOpen, }, Menu{ Text: "SubMenu", Items: []MenuItem{ Action{ Text: "SubItem1", OnTriggered: mw.menuSub1, }, }, }, Separator{}, Action{ Text: "&Exit", OnTriggered: func() { mw.Close() }, }, }, }, Menu{ Text: "&Else", Items: []MenuItem{ Action{ Text: "&About", OnTriggered: mw.menuAbout, }, }, }, }, Children: []Widget { TextEdit { AssignTo: &mw.edit, }, }, } if _, err := MW.Run(); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } } func (mw *MyMainWindow) menuOpen() { mw.edit.AppendText("Event : File -> Open select\r\n") } func (mw *MyMainWindow) menuSub1() { mw.edit.AppendText("Event : File -> SubMenu -> SubItem1 select\r\n") } func (mw *MyMainWindow) menuAbout() { mw.edit.AppendText("Event : Else -> About select\r\n") }