ぷらこのきろく

メモとかテストとか備忘録とか

walk PushButton

今日遊んだコードはこんな感じ

package main

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

func main() {
	var te1  *walk.TextEdit
	
	MainWindow{
		Title: "hello",
		Size: Size{320, 480},
		Layout: VBox{},
		Children: []Widget {
			TextEdit {
				AssignTo: &te1,
			},
			PushButton{
				Text: "hello",
				ToolTipText: `put "hello"`,
				OnClicked: func() {
					text := te1.Text()
					text = strings.Join(
						[]string{text, "hello"},
						"")
					te1.SetText(text)
				},
			},
		},
	}.Run()
}

TextEditのところまでは昨日(だっけ)のとほぼ同じ。PushButtonをとりあえず使ってみた。

Textの部分は、ボタンに書かれる文字列が入る。
中身を見てみると、Property型となってて、さらに見てみると、interface{}型だった。つまり、どんな型の中身を入れても理論上問題はないみたい。実際にint型の123を入れてみたが、コンパイルは通った。
ただ、string型でないと実行時にエラーが起きた。結局string型しか入らないんだろう。なんでそんな仕様になってるかまだわからないけど、とりあえずそんな感じ。

ToolTipTextは、ここに文字列いれておくと、マウスカーソルを合わせたときに説明が出る。

OnClickedは、関数が入る。ボタン押されたときに処理をしてくれる。
中身はwalk.EventHandler型となってるけど、さらに中身を見たらfunc()ってなってたのできっとそうなんだろう。
引数はとれないと思う。だから、データを受け渡しするには、グローバル変数を使うか、今回のコードのようにfunc()を直書きするか、ここでやってるように構造体を作ってそれで処理するか、だと思う。

walk.TextEdit型のメソッドにText()や、SetText()がある。
Text()は、中に書かれているテキストがstring型で返る。
SetText(value string)は、valueの文字列をテキストエリアに表示させる。
他のメソッドもいっぱいあるみたいだけど、それはwalk/textedit.goに書いてあるみたい。

今日はこれだけで満足。
今度はイメージ表示とかできたらいいなぁ。。