Windows環境でGo言語のGUIライブラリのFyneを使ってGUIアプリを作ってみました。
何も考えなくてもいい感じの見た目にしてくれるそうです。
インストール
Fyneについては公式のページにインストール方法がまとめられていました。 Windowsでビルドするには、MSYS2 with MingW-w64かTDM-GCCを入れる必要があります。
MSYSで必要なパッケージを入れます。
pacman -S mingw-w64-x86_64-go
pacman -S git
pacman -S gcc
pacman -S base-devel
pacman -S mingw-w64-x86_64-toolchain
デモ
公式ページのサンプルアプリを実行します。 Fyne
package main
import (
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/theme"
"fyne.io/fyne/widget"
)
func main() {
a := app.New()
w := a.NewWindow("Hello")
w.SetContent(widget.NewVBox(
widget.NewLabel("Hello Fyne!"),
widget.NewButton("Quit", func() {
a.Quit()
}),
))
w.ShowAndRun()
}
見た目はデフォルトでダークテーマになるようです。ライトテーマにするにはa.Settings().SetTheme(theme.LightTheme())
を最初に定義するだけ変更できます。
アプリを作ってみる
勝敗と連勝をカウントするカウンターを作ってみました。
package main
import (
"strconv"
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/layout"
"fyne.io/fyne/theme"
"fyne.io/fyne/widget"
)
func main() {
a := app.New()
a.Settings().SetTheme(theme.LightTheme())
w := a.NewWindow("WinLossCounter")
w.Resize(fyne.NewSize(300, 100))
cont := 0
winCount := 0
lossCount := 0
contEntry := widget.NewEntry()
contEntry.SetText(strconv.Itoa(cont))
contLabel := widget.NewLabel(":")
winEntry := widget.NewEntry()
winEntry.SetText(strconv.Itoa(winCount))
winLabel := widget.NewLabel(":")
lossEntry := widget.NewEntry()
lossEntry.SetText(strconv.Itoa(lossCount))
winButton := widget.NewButton("win", func() {
winCount++
cont++
winEntry.SetText(strconv.Itoa(winCount))
contEntry.SetText(strconv.Itoa(cont))
})
lossButton := widget.NewButton("loss", func() {
lossCount++
cont = 0
lossEntry.SetText(strconv.Itoa(lossCount))
contEntry.SetText(strconv.Itoa(cont))
})
w.SetContent(widget.NewVBox(
fyne.NewContainerWithLayout(layout.NewCenterLayout(), widget.NewHBox(contEntry, contLabel, winEntry, winLabel, lossEntry)),
fyne.NewContainerWithLayout(layout.NewCenterLayout(), widget.NewHBox(winButton, lossButton)),
))
w.ShowAndRun()
}
ドキュメントが豊富なのでそこまで詰まったりすることなく作れました。 見た目は何も考えなくてもそれなりにきれいな感じになったと思います。
よくわからなかったこと
日本語化
デフォルトでは日本語化に対応していないのですが、日本語フォントに変更することで日本語化できるそうなのですがよくわからなかったです。
参考
Go言語用GUIライブラリ「Fyne」を使ってみた | 非IT企業に勤める中年サラリーマンのIT日記
MSYS2 と MinGW のインストール - takaya030の備忘録
fyne-io/fyne: Cross platform GUI in Go based on Material Design
【Go】GUIアプリを作ってみる | Narumium Blog
T2-Wonderland: Go言語製のキレイなGUIアプリをFyneライブラリで作るよ!(*´ω`*)