田中太郎
lxn/walkを使ってGo言語(golang)でメモ帳アプリを作成します
今回は、メニューバーを作成します
はじめに
lxn/walkの使い方が分からない方はこちら
メニューバーを作成する
完成イメージ
サンプルコード
package main
import (
"log"
"github.com/lxn/walk"
. "github.com/lxn/walk/declarative"
)
type MyMainWindow struct {
main *walk.MainWindow
textedit *walk.TextEdit
}
func (app *MyMainWindow) menuAbout() {
_ = walk.MsgBox(nil, "タイトル", "メッセージ内容", walk.MsgBoxOKCancel)
}
func main() {
app := &MyMainWindow{}
if _, err := (MainWindow{
Title: "NotePad",
MinSize: Size{300, 200},
Layout: VBox{},
Children: []Widget{
TextEdit{
AssignTo: &app.textedit,
},
},
// 以下、メニュー作成
MenuItems: []MenuItem{
Menu{
Text: "ファイル",
Items: []MenuItem{
Action{
Text: "開く",
Shortcut: Shortcut{
Key: walk.KeyO,
Modifiers: walk.ModControl,
},
OnTriggered: app.menuAbout,
},
Separator{},
Action{
Text: "保存",
Shortcut: Shortcut{
Key: walk.KeyS,
Modifiers: walk.ModControl,
},
OnTriggered: app.menuAbout,
},
Action{
Text: "名前を付けて保存",
Shortcut: Shortcut{
Key: walk.KeyA,
Modifiers: walk.ModControl,
},
OnTriggered: app.menuAbout,
},
},
},
Menu{
Text: "その他1",
Items: []MenuItem{
Menu{
Text: "その他2",
Items: []MenuItem{
Action{
Text: "その他3",
OnTriggered: app.menuAbout,
},
},
},
},
},
},
}).Run(); err != nil {
log.Fatal(err)
}
}
解説
MenuItemsでメニューバーを作成します
MenuItems: []MenuItem{
Menu{},
Separator{},
Menu{},
}
Menu{}毎にメニューが追加されます
Separator{}はメニューとメニューの間に線を引きます。見栄えです。
Menu{}の中身(タイトルや動作)を設定します
Menu{
Text: "メニュー", // メニュー名
Items: []MenuItem{ // 動作を書く
Action{
Text: "サブメニュー", // サブメニュー名
OnTriggered: <関数>, // "サブメニュー"がクリックされたときに動作する関数を指定
Shortcut: Shortcut{ // ショートカットキーを設定
Key: walk.KeyO, // walk.Key<キー名(大文字)>
Modifiers: walk.ModControl, // walk.Mod<Control, Alt, Shift>(なくてもよい)
},
},
Menu{ // メニューの中にメニューを作ることもできます
// 中身
},
},
}
まとめ
lxn/walkを使ったGUIアプリにメニューバーを追加しました
コメント