Pular para o conteúdo principal

victorstein.dev

85/100 Dias de Golang - Interfaces Gráficas com Fyne

Table of Contents

# Interfaces Gráficas com Fyne

Pesquisando sobre interfaces gráficas em Golang encontrei o Fyne. Fyne é um framework open-source para construção de interfaces gráficas modernas usando a linguagem Go, ele entrega suporte nativo para Windows, Linux, macOS, Android e iOS, layouts responsivos, temas, vários widgets nativos: botões, entradas de texto, caixas de seleção, tabelas e muito mais. Achei legal que eles oferecem uma demo para baixarmos.

go install fyne.io/fyne/v2/cmd/fyne_demo@latest

Rodando a aplicação com:

fyne_demo

Nessa demo temos acesso a vários componentes do fyne. Muito útil para vermos o potencial do framework. Agora vamos instalar o fyne e criar uma aplicação:

go install fyne.io/fyne/v2/cmd/fyne@latest
go get fyne.io/fyne/v2

Vamos criar uma calculadora, veja a estrutura básica:

package main

import (
	"strconv"

	"fyne.io/fyne/v2/app"
	"fyne.io/fyne/v2/container"
	"fyne.io/fyne/v2/widget"
)

func main() {
	myApp := app.New()
	myWindow := myApp.NewWindow("Calculadora")

	entrada1 := widget.NewEntry()
	entrada1.SetPlaceHolder("Número 1")

	entrada2 := widget.NewEntry()
	entrada2.SetPlaceHolder("Número 2")

	resultado_soma := widget.NewLabel("Soma: ")
	resultado_multiplicacao := widget.NewLabel("Multiplicação: ")
	resultado_divisao := widget.NewLabel("Divisão: ")

	botao := widget.NewButton("Somar", func() {
		a, _ := strconv.Atoi(entrada1.Text)
		b, _ := strconv.Atoi(entrada2.Text)
		resultado_soma.SetText("Soma: " + strconv.Itoa(a+b))
		resultado_multiplicacao.SetText("Resultado: " + strconv.Itoa(a*b))
		resultado_divisao.SetText("Resultado: " + strconv.Itoa(a/b))

	})

	conteudo := container.NewVBox(entrada1, entrada2, botao, resultado_soma, resultado_multiplicacao, resultado_divisao)
	myWindow.SetContent(conteudo)
	myWindow.ShowAndRun()
}

A estrutura dos apps fyne é sempre bem semelhante:

app.New()               // Cria o App
 → app.NewWindow()      // Cria uma janela
   → container.NewXXX() // Define o layout (VBox, HBox, etc.)
     → widget.NewXXX()  // Adiciona botões, campos, textos, etc.
 → window.ShowAndRun()  // Exibe e roda o app

A estrutura é bem limpa e organizada, podemos reutilizar os widgets e o suporte nativo a múltiplas plataformas é muito legal.