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") } }