非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Go言語用GUIライブラリ「Fyne」を使ってみた

      2021/10/22

以前、Go+GTK+でGUIアプリの作り方を紹介しましたが、なんと「Fyne」という100 %ピュアGoで実装されたGUIライブラリがあるとのことで早速試してみました。

いつから登場したのかわかりませんが、Fyneに関する記事の日付からすると2019年の秋くらいですかね。

まだ新しいライブラリなだけに情報も少ないし、ウィジェットもあまり多くなさそうです。ただ、ここ直近の注目度からすると今後進化していくんじゃないかと期待できます。

今回はインストール方法から簡単なプログラムの作り方を紹介します。

Fyneのインストール

コンソールから以下のコマンドでFyneをインストールできます。

$ go get fyne.io/fyne
 

 

実はこれだけでは使えず、OpenGLをインストールする必要があります。以下はUbuntu系Linuxでのインストール例です。

$ sudo apt-get install freeglut3-dev libglew1.5-dev
 

 

これで、Fyneを使う環境が整いました。

Fyneプログラム例

以下の公式サイトのサンプルを参考に作成してみました。

https://fyne.io/develop/firstapp

package main

import (
  "fyne.io/fyne/app"
  "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()
}
 

 

実行例がこちらです。「Quit」ボタンでアプリを終了します。デフォルトはダークカラーみたいです。

 

僕はダーク系が嫌いなので(VSCodeもライトカラーにしている)、ライトカラーにしてみます。ソースコードは以下の通り。

package main

import (
  "fyne.io/fyne/app"
  "fyne.io/fyne/widget"
  "fyne.io/fyne/theme" //追加
)

func main() {
  a := app.New()
  a.Settings().SetTheme(theme.LightTheme()) //追加

  w := a.NewWindow("Hello")
  w.SetContent(widget.NewVBox(
    widget.NewLabel("Hello Fyne!"),
    widget.NewButton("Quit", func() {
      a.Quit()
    }),
  ))

  w.ShowAndRun()
}
 

 

ご覧の通りライトカラーになりました。僕はこちらの方が好きですね。

次にウィンドウサイズを大きくしてみましょう。ソースコードは以下の通り。

package main

import (
  "fyne.io/fyne" //追加
  "fyne.io/fyne/app"
  "fyne.io/fyne/widget"
  "fyne.io/fyne/theme"
)

func main() {
  a := app.New()
  a.Settings().SetTheme(theme.LightTheme())

  w := a.NewWindow("Hello")
  w.SetContent(widget.NewVBox(
    widget.NewLabel("Hello Fyne!"),
    widget.NewButton("Quit", func() {
      a.Quit()
    }),
  ))

  w.Resize(fyne.NewSize(400,200)) //追加
  w.ShowAndRun()
}
 

 

最初からサイズを設定するのではなく、ウィンドウを出現させる前にリサイズするみたいですね。実行例は以下の通り。

 

ボタンの位置がちょっと変ですが、レイアウトやウィジェットサイズなどはいずれ….。

 

スポンサーリンク

 - Fyne, Go言語