hakeの日記

Windows環境でプログラミングの勉強をしています。

Go言語 - WALKでGUI - ComboBox

ComboBox(プルダウンメニュー)の使用例。
ComboBoxは状態を保持するので、MyMainWindow構造体に変数を追加し、実体としてアサインします。
Modelフィールドで表示する項目を、CurrentIndexフィールドで初期値を設定しています。
選択項目を変更すると、OnCurrentIndexChangedイベントが発生するので、選択したTextを表示させています。また、ボタンクリックで現在選択されているIndex値とTextを表示した後、メニュー最初の値(Index = 0)に設定しなおす動作を行います。

package main

import (
	"github.com/lxn/walk"
	. "github.com/lxn/walk/declarative"
)

import (
	"fmt"
	"os"
)

type MyMainWindow struct {
	*walk.MainWindow
	combo  *walk.ComboBox
	edit   *walk.TextEdit
}

func main() {
	mw := &MyMainWindow {}

	var menuItems = []string {    // ComboBox項目リスト
		"One",
		"Two",
		"Three",
		"Four",
		"Five",
	}

	MW := MainWindow{
		AssignTo: &mw.MainWindow,
		Title: "ComboBoxテスト",
		MinSize: Size {150, 200},
		Size   : Size {300, 400},
		Layout: VBox {},
		Children: []Widget {
			ComboBox {
				AssignTo: &mw.combo,
				Model: menuItems,
				CurrentIndex: 2,        // 初期値
				OnCurrentIndexChanged: mw.comboChanged,
			},
			TextEdit {
				AssignTo: &mw.edit,
			},
			PushButton {
				Text: "Push",
				OnClicked: mw.pbClicked,
			},
		},
	}

	if _, err := MW.Run(); err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}

}

// ComboBox 変更時イベント処理
func (mw *MyMainWindow) comboChanged() {
	s := "Event: " + mw.combo.Text() + " slected.\r\n"
	mw.edit.AppendText(s)
}

// PushButtonクリック時イベント処理
func (mw *MyMainWindow) pbClicked() {
	s := fmt.Sprintf("CurIdx: %d,  CurText: %s\r\n",
	                     mw.combo.CurrentIndex(),
	                     mw.combo.Text() )
	mw.edit.AppendText(s)

	mw.edit.AppendText("Set Index 0\r\n")
	mw.combo.SetCurrentIndex(0)             // 一番上の項目を設定

}