반응형

Fyne tutorial에 있는 timer 예제입니다.

 

1. main.go

package main

import (
	"time"

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

func showTime(clock *widget.Label) {
	formatted := time.Now().Format("03:04:05")	//현재시각을 포멧에 따라 출력한다.
	clock.SetText(formatted)
}

func main() {
	a := app.New()
	w := a.NewWindow("Clock")

	clock := widget.NewLabel("")
	showTime(clock)

	w.SetContent(clock)
	go func() {
		t := time.NewTicker(time.Second) //매 초마다 메시지(시간)를 전송하는 채널 t생성 

		for range t.C {			//채널 C로 time값을 받아 순서대로 처리한다. 
			showTime(clock)		//매 초마다 시간을 출력한다. 
		}
	}()

	w.ShowAndRun()	//앱을 보여주고 실행한다. 
}
 

 

<결과>

 

 

~~끝~~

 
반응형
반응형

1. icon.png 이미지 파일을 준비합니다.

 

2. fyne 패키징 툴을 다운받습니다.

go get fyne.io/fyne/cmd/fyne

3. icon.png파일을 실행파일의 이미지로 패키징합니다.

fyne package -icon icon.png

 

 

반응형
반응형

Fyne를 이용하여 GUI에서 테이블을 구현해 보았습니다.

아직 익숙하지 않아서 굴러다니는 소스 복사해다가 몇가지 위치/사이즈만 변형시켜보는 수준이지만,

필요하신 분이 있을지도 모른다는 희망에 올려봅니다.

package main

import (
	"fmt"

	"fyne.io/fyne"
	"fyne.io/fyne/app"
	"fyne.io/fyne/layout"

	//"fyne.io/fyne/theme"
	"fyne.io/fyne/widget"
)

func main() {
	app := app.New() //app 선언
	//app.Settings().SetTheme(theme.LightTheme()) //밝은 테마 설정

	w := app.NewWindow("Hello") //window 선언
	entry := widget.NewEntry()
	entry.SetPlaceHolder("database@databaseservr.com:5000/orcl")

	w.SetContent(
		widget.NewVBox(
			widget.NewLabel("Databas Address"), //레이블
			widget.NewHBox(
				entry, //엔트리 (문자열 입력)
				widget.NewButton("Go", func() { //종료버튼
					app.Quit()
				}),
			),
			makeTable( //makeTable함수를 사용하여 테이블 선언 및 변수 입력
				[]string{"Foo", "Bar", "Baz", "My_a", "My_b", "My_c"}, //칼럼(헤더)
				[][]string{{"1", "2", "3"}, {"4", "5", "6"}},          //데이터
			),
		),
	)
	w.Resize(fyne.NewSize(600, 600))
	w.ShowAndRun()
}

func makeTable(headings []string, rows [][]string) *widget.Box {

	columns := rowsToColumns(headings, rows)

	objects := make([]fyne.CanvasObject, len(columns))
	for k, col := range columns {
		box := widget.NewVBox(widget.NewLabelWithStyle(headings[k], fyne.TextAlignLeading, fyne.TextStyle{Bold: true}))
		for _, val := range col {
			box.Append(widget.NewLabel(val))
		}
		objects[k] = box
	}
	return widget.NewVBox(
		fyne.NewContainerWithLayout(layout.NewGridLayout(len(columns)), objects...),
	)
}

func rowsToColumns(headings []string, rows [][]string) [][]string {
	columns := make([][]string, len(headings))
	for _, row := range rows {
		for colK := range row {
			columns[colK] = append(columns[colK], row[colK])
		}
	}
	return columns
}

 

결과는 아래와 같이...

 

 

다음엔 쫌더 이쁘게 만들어봅시당...ㅋㅋㅋ

그럼 이만~~~

 

반응형
반응형

Go언어로 GUI를 만들려고 하니 이것저것 다른 GUI Toolkit을 만져보게 되네요.

오늘은 fyne라는 toolkit을 설치해볼까 합니다. 설치 방법은 비교적 간단한데요. 아래와 같이 입력하면 설치가 됩니다.

(기본적으로 MSYS2 가 설치되어있어야 합니다.)

go get fyne.io/fyne

 

Hello world부터 띄워보겠습니다.

// fyne_hello.go
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()
}

 

내용은 아직 잘 모르지만 아래 그림처럼 잘 뜨네요..

 

 

 

 테마가 특이하단 생각이듭니다. 윈도우 프로그래밍 할때 쓰던C# 이나, JAVA 같은거랑은 완전 다른 느낌이네요. 나름 쉽게접근할 수 있어서 한번 몇가지 더 시도해 봐야겠습니다.

 

(ps) 우분투에서 설치하면서 Fyne 작동 시 아래와 같은 오류가 뜰 때에는...

# fyne.io/fyne/v2/vendor/github.com/go-gl/glfw/v3.3/glfw
/usr/bin/ld: cannot find -lXxf86vm
collect2: error: ld returned 1 exit status

 

추가로 라이브러리를 하나 더 설치해줍니다.

sudo apt-get install libgl1-mesa-dev xorg-dev

 

 

 

반응형

'Programming > Golang' 카테고리의 다른 글

go언어 fyne layout 예제  (4) 2020.04.07
go언어 fyne table만들기  (0) 2020.04.05
andlabs/ui Table예제 코드  (4) 2020.03.30
windows에 go언어 설치하기  (2) 2020.03.29
Glade를 활용한 go언어 gui프로그래밍  (0) 2020.03.26

+ Recent posts