今回はgo言語でGUIアプリの作成を行っていきます。
go言語のGUIアプリですが複数種類あります。
が、QtやGtkは使ったことがあったので出来れば別の方法が良いな!!
と思い、調べてみたら見つけたので早速使用してみることにしました。
■動作環境
・OS:Ubuntu20.04(VirtualBox 仮想環境)
・go version:1.13.08
go versionが1.9以下ですと、Fyneはインストールできるのですが、
コードを作成してビルド・実行を行うと、
../go/src/fyne.io/fyne/storage/uri.go:29:10: undefined: strings.ReplaceAll ../go/src/fyne.io/fyne/storage/uri.go:30:10: undefined: strings.ReplaceAll
といったエラーが発生してしまいます。
必ず1.10以上(出来る限り最新の)go言語をご利用ください。
■Fyneインストール
ではFyneをインストールしていきます。
こちらを実行。
go get fyne.io/fyne
これでインストール完了!!
では動作確認!!
動作確認用のソースコードをダウンロード。
go get fyne.io/fyne/cmd/fyne_demo/
そして、fyne_demo配下に格納されているmain.goを実行。
go run main.go
こちらのようなGUIアプリが表示されればFyneのインストールは成功です。
■簡単なコード作成
では簡単なサンプルコードを作成し、実行してみます。
まずはコードから。
package main import ( "fyne.io/fyne/app" "fyne.io/fyne/widget" ) func main() { a := app.New() w := a.NewWindow("Hello") hello := widget.NewLabel("Hello Fyne") w.SetContent( widget.NewHBox( hello, widget.NewButton("Hi", func() { hello.SetText("Welcome") }), ), ) w.ShowAndRun() }
こちらはfyneが公式で公開しているサンプルコードを写経したものですw
a := app.New() w := a.NewWindow("Hello")
でアプリやウィンドウ(表示画面)を定義。
そして、
w.SetContent( widget.NewVBox( hello, widget.NewButton("Hi", func() { hello.SetText("Welcome") }), ), )
で表示する形状を定義。
最後に、
w.ShowAndRun()
でGUIアプリを実行。
といった形になります。
結構直感的に作成できるのが良いですね!!
こちらを実行すると、
が表示されます。
そして、Hiと記載されたボタンを押下すると、
というようにLabelの文字が変化します。
この
widget.NewVBox(
を
widget.NewHBox(
に変更すると、
というように横に並びます。
■簡単なコード作成2
今後はこちらのコードを作成。
package main import ( "fyne.io/fyne/app" "fyne.io/fyne/widget" ) func main() { a := app.New() w := a.NewWindow("Hello") hello_1 := widget.NewLabel("Hello Fyne") hello_2 := widget.NewLabel("Hello world") w.SetContent( widget.NewHBox( widget.NewVBox( hello_1, widget.NewButton("No.1", func() { hello_1.SetText("Welcome") }), ), widget.NewVBox( hello_2, widget.NewButton("No.2", func() { hello_2.SetText("AAA") }), ), ), ) w.ShowAndRun() }
こちらを実行すると、
といったアプリが作成できます。
ラベル+ボタンを縦に並べ、
widget.NewVBox( hello_1, widget.NewButton("No.1", func() { hello_1.SetText("Welcome") }), ),
それぞれを、
widget.NewHBox(
によって横に並べております。
■最後に
今回はfyneについて使用してみました。
結構感覚的に使用できたので、結構簡単に使えるライブラリだな!!と感じました。
使っていってみようかしら?