Go言語 - WALKでGUI - RadioButton
RadioButtonの使用例。
起動時にRadioButtonを選択してある状態にする方法がわからない。。。
RadioButtunをRadioButtonGroupBoxの中に配置することで、そのグループ内で排他選択ができるようになります。各RadioButtonウィジェットから、そのボタンが選択されているかの情報が取得できない様なので、MyMainWindow構造体の中にフィールドを追加して、RadioButtonのクリックイベントでフィールドの値にRadioButtonのValuefフィールドの値を設定する様にしています。このときValue()メソッドで返されるのがinterface{}型の為、型アサーションでint型に変換して代入しました。
package main import ( "github.com/lxn/walk" . "github.com/lxn/walk/declarative" ) import ( "fmt" "os" ) type MyMainWindow struct { *walk.MainWindow // rdgb1 *walk.GroupBox // rdgb2 *walk.GroupBox rd1 *walk.RadioButton rd2 *walk.RadioButton edit *walk.TextEdit // ウィジェットから直接チェック有無を確認できない為 // クリックイベントでこの変数に保持する。 rdG1Value int // Group1用 } func main() { mw := &MyMainWindow {} mw.rdG1Value = 0 MW := MainWindow{ AssignTo: &mw.MainWindow, Title: "RadioButtonテスト", MinSize: Size {300, 200}, Size : Size {300, 300}, Layout: VBox {}, Children: []Widget { RadioButtonGroupBox { // AssignTo: &mw.rdgb1, Title: "Group 1", Layout: HBox{}, Buttons: []RadioButton { RadioButton { AssignTo: &mw.rd1, Text: "Btn 1", Value: 1, OnClicked: mw.rb1Clicked, }, RadioButton { AssignTo: &mw.rd2, Text: "Btn 2", Value: 2, OnClicked: mw.rb2Clicked, }, }, }, RadioButtonGroupBox { // AssignTo: &mw.rdgb2, Title: "Group 2", Layout: HBox{}, Buttons: []RadioButton { RadioButton { // AssignTo: &mw.rd3, Text: "Btn 3", Value: "3", }, RadioButton { // AssignTo: &mw.rd4, Text: "Btn 4", Value: "4", }, }, }, 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) rb1Clicked() { mw.edit.AppendText("Event : Btn1 Clicked\r\n") i := mw.rd1.Value() mw.rdG1Value = i.(int) // 型アサーション } func (mw *MyMainWindow) rb2Clicked() { mw.edit.AppendText("Event : Btn2 Clicked\r\n") i := mw.rd2.Value() mw.rdG1Value = i.(int) // 型アサーション } func (mw *MyMainWindow) pbClicked() { var s string if mw.rdG1Value == 0 { s = fmt.Sprintf("INFO : Button is not selected\r\n") } else { s = fmt.Sprintf("INFO : Button %d is selected\r\n", mw.rdG1Value) } mw.edit.AppendText(s) }