ITオムライス

Go言語でGUIライブラリのFyneを試してみた

2020-08-12 技術系

Windows環境でGo言語のGUIライブラリのFyneを使ってGUIアプリを作ってみました。
何も考えなくてもいい感じの見た目にしてくれるそうです。

インストール

Fyneについては公式のページにインストール方法がまとめられていました。 Windowsでビルドするには、MSYS2 with MingW-w64かTDM-GCCを入れる必要があります。

MSYS2

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ライブラリで作るよ!(*´ω`*)

Fyne で日本語フォントを扱う | blog - lusingander

Fyne でのアイコンや画像の取り扱い | blog - lusingander

関連記事

Go言語でGUIツールを作ってみた | ITオムライス

Go言語のwalkを使ってGUIでフォルダを選択する | ITオムライス

Go言語のGUIライブラリのLorcaを使ってみる | ITオムライス