본문 바로가기

Programming/Golang

go언어 fyne table만들기

반응형

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
}

 

결과는 아래와 같이...

 

 

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

그럼 이만~~~

 

반응형