Go言語|walkでメモ帳を作る~メニューバーを作成~

Go
田中太郎
田中太郎

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アプリにメニューバーを追加しました

コメント

タイトルとURLをコピーしました