hakeの日記

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

Go言語 - WALKでGUI - CheckBox

CheckBoxの使用例。
CheckBoxも状態を保持するので、MyMainWindow構造体に変数を追加し、実体としてアサインします。
二つのCheckBoxをGroupBoxの下に配置して、LayoutフィールドをHBoxにすることでCheckBoxを水平に並べています。また、Check1のCheckedフィールドをtrueにして初期状態でチェックされている状態にしています。
二つのCheckBoxともOnCheckedChangedイベントで状態が変わったことを表示させるようにしています。
ボタンクリックイベント処理で使用している定数walk.CheckCheckedは、ライブラリのcheckbox.goで定義されているものを使用しました。


package main

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

import (
	"fmt"
	"os"
)

type MyMainWindow struct {
	*walk.MainWindow
	chk1   *walk.CheckBox
	chk2   *walk.CheckBox
	edit   *walk.TextEdit
}

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

	MW := MainWindow{
		AssignTo: &mw.MainWindow,
		Title: "CheckBoxテスト",
		MinSize: Size {300, 200},
		Size   : Size {300, 300},
		Layout: VBox {},
		Children: []Widget {
			GroupBox {
				Title: "CheckBox",
				Layout: HBox{},
				Children: []Widget {
					CheckBox {
						AssignTo: &mw.chk1,
						Text: "Check 1",
						Checked: true,
						OnCheckedChanged: mw.check1Changed,
					},
					CheckBox {
						AssignTo: &mw.chk2,
						Text: "Check 2",
						OnCheckedChanged: mw.check2Changed,
					},
				},
			},
			TextEdit {
				AssignTo: &mw.edit,
			},
			PushButton {
				Text: "Push",
				OnClicked: mw.pbClicked,
			},
		},
	}

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

}

func (mw *MyMainWindow) check1Changed() {
	mw.edit.AppendText("Event: CHK1 changed\r\n")
}

func (mw *MyMainWindow) check2Changed() {
	mw.edit.AppendText("Event: CHK2 changed\r\n")
}

func (mw *MyMainWindow) pbClicked() {
	if mw.chk1.CheckState() == walk.CheckChecked {
		mw.edit.AppendText("CHK1 checked\r\n")
	}
	if mw.chk2.CheckState() == walk.CheckChecked {
		mw.edit.AppendText("CHK2 checked\r\n")
	}
}