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) // 一番上の項目を設定 }