Golang의 fyne 기본프로그램 함수 리스트 -golang
UI 레이아웃 관련
container.NewVBox() - 수직으로 위젯을 배치하는 컨테이너 생성.
container.NewHBox() - 수평으로 위젯을 배치하는 컨테이너 생성.
container.NewGridWithRows() - 지정된 행(Row) 수로 그리드를 구성.
container.NewGridWithColumns() - 지정된 열(Column) 수로 그리드를 구성.
container.NewBorder() - 상하좌우에 위젯을 배치하고, 중앙에 다른 위젯을 추가.
layout.NewSpacer() - UI 요소 간에 공간을 추가.
위젯 관련
widget.NewLabel(text) - 단순 텍스트 레이블 생성.
widget.NewEntry() - 사용자 입력을 받을 수 있는 텍스트 입력 필드 생성.
entry.SetPlaceHolder("텍스트를 입력하세요") - 플레이스홀더 텍스트 설정.
widget.NewPasswordEntry() - 비밀번호 입력용 텍스트 필드 생성.
widget.NewButton(label, func()) - 버튼 생성 및 클릭 이벤트 핸들러 등록.
widget.NewSelect(options, func(value string)) - 드롭다운 목록 생성.
widget.NewList() - 동적 리스트 생성.
widget.NewTable() - 데이터 테이블 생성.
파일 입출력 및 데이터 관리
dialog.NewFileOpen(callback, parent) - 파일 열기 대화상자 생성.
dialog.NewFileSave(callback, parent) - 파일 저장 대화상자 생성.
app.Preferences() - 로컬 설정 데이터를 저장하거나 가져오기 위한 Preferences 객체.
prefs.SetString(key, value) - 문자열 저장.
prefs.String(key) - 저장된 문자열 가져오기.
storage.OpenFileFromURI(uri) - 지정된 URI에서 파일 열기.
storage.SaveFileToURI(uri, data) - URI에 파일 저장.
이벤트 및 앱 실행
app.New() - 새로운 Fyne 애플리케이션 생성.
myApp.NewWindow(title) - 새로운 창(Window) 생성.
window.SetContent(content) - 창의 컨텐츠 설정.
window.Resize(size) - 창 크기 설정.
window.Show() - 창 표시.
window.ShowAndRun() - 애플리케이션 실행 및 기본 창 표시.
레이아웃 및 반응형 UI
fyne.NewSize(width, height) - 특정 크기를 정의.
widget.SetMinSize(size) - 최소 크기 설정.
container.NewAdaptiveGrid(cols) - 반응형 그리드 생성.
기타 유용한 함수
canvas.NewText(text, color) - 간단한 텍스트 생성.
canvas.NewImageFromFile(path) - 이미지 파일에서 이미지 위젯 생성.
fyne.CurrentApp() - 현재 실행 중인 애플리케이션 참조.
canvas.Refresh(object) - 위젯 내용 업데이트.
widget.NewProgressBar() - 진행률 표시 위젯 생성.
멀티라인 텍스트 입력
widget.NewMultiLineEntry()
여러 줄의 텍스트를 입력할 수 있는 필드 생성.entry.SetText(text) - 텍스트 설정.
entry.Text - 입력된 텍스트 가져오기.
entry.OnChanged(func(string)) - 텍스트 변경 시 이벤트 처리.
아이콘 버튼
widget.NewButtonWithIcon(label, icon, func())
텍스트와 아이콘이 포함된 버튼 생성.
예: 저장 버튼, 삭제 버튼 등.
체크박스
widget.NewCheck(label, func(bool))
사용자가 체크 상태를 선택할 수 있도록 설정.
탭 인터페이스
container.NewAppTabs()
탭 레이아웃을 만들어 a아이템 / b아이템을 분리 가능.
tabs := container.NewAppTabs(
container.NewTabItem("a아이템", aitem),
container.NewTabItem("b아이템", bitem),
)
tabs.SetTabLocation(container.TabLocationTop)
스위치 토글
widget.NewSwitch(label, func(bool))
On/Off 스위치 버튼 생성.
툴바
widget.NewToolbar()
도구 모음 UI 생성. 북마크 추가, 데이터 삭제, 정렬 등을 빠르게 구현 가능.
toolbar := widget.NewToolbar(
widget.NewToolbarAction(theme.ContentAddIcon(), func() {
fmt.Println("추가 버튼 클릭됨")
}),
widget.NewToolbarAction(theme.ContentRemoveIcon(), func() {
fmt.Println("삭제 버튼 클릭됨")
}),
)
팝업 메시지
dialog.NewInformation(title, message, parent)
정보 메시지를 사용자에게 표시.dialog.ShowConfirm(title, message, yesCallback, noCallback, parent)
확인/취소 선택 대화 상자.
알림(Notification)
app.SendNotification(&fyne.Notification{Title: "알림 제목", Content: "알림 내용"})
운영 체제 알림 표시.
Canvas 객체 애니메이션
canvas.NewRectangle(color) - 색상으로 사각형 생성.
canvas.NewCircle(color) - 색상으로 원형 생성.
animationDriver := canvas.NewAnimationDriver() - 간단한 애니메이션 효과 구현.
동적 테이블 생성
widget.NewTable()
행과 열을 동적으로 구성하는 데이터 테이블.
table := widget.NewTable(
func() (int, int) { return 10, 3 }, // 행, 열 크기
func() fyne.CanvasObject {
return widget.NewLabel("기본값")
},
func(id widget.TableCellID, cell fyne.CanvasObject) {
label := cell.(*widget.Label)
label.SetText(fmt.Sprintf("Row %d Col %d", id.Row, id.Col))
},
)
리스트 생성
widget.NewList() 동적 데이터 리스트
list := widget.NewList(
func() int { return len(data) }, // 항목 개수
func() fyne.CanvasObject { return widget.NewLabel("아이템") },
func(id widget.ListItemID, item fyne.CanvasObject) {
item.(*widget.Label).SetText(data[id])
},
)
JSON 읽기/쓰기
데이터 저장을 JSON 포맷으로 관리 가능
type DiaryEntry struct {
Date string `json:"date"`
Content string `json:"content"`
}
// JSON으로 변환
jsonData, _ := json.Marshal(diaryEntry)
// JSON에서 구조체로 변환
json.Unmarshal(jsonData, &diaryEntry)
외부 파일 불러오기
ioutil.ReadFile() 및 ioutil.WriteFile()로 파일 읽기/쓰기.
스크롤 컨테이너
container.NewScroll(content)
내용이 화면에 다 보이지 않을 경우 스크롤 추가.
모바일 레이아웃
Fyne의 기본 컨테이너는 화면 크기에 따라 반응형으로 조정됨.
container.NewAdaptiveGrid(cols) - 화면 크기에 맞는 열 자동 조정.
시간 포맷팅
time.Now().Format("2006-01-02") - 현재 날짜 포맷.
time.Parse("2006-01-02", dateString) - 문자열을 날짜로 변환.
캘린더 UI
Fyne 자체에는 기본 캘린더가 없지만 widget.NewSelect()와 날짜 데이터를 활용하여 간단히 구현 가능.
디자인 테마:
fyne.Theme()를 활용하여 사용자 정의 테마를 적용 가능.
다크 모드 또는 라이트 모드 지원 추가 가능.
UI 테스트:
Fyne에서는 간단한 UI 테스트도 제공하므로 안정성을 점검하며 개발 가능.
파일에서 이미지 로드
canvas.NewImageFromFile(path)
로컬 파일 경로에서 이미지를 불러와 표시합니다.
img := canvas.NewImageFromFile("example.jpg")
img.FillMode = canvas.ImageFillContain
URI에서 이미지 로드
canvas.NewImageFromURI(uri)
URI에서 이미지를 불러와 표시합니다.
리소스에서 이미지 로드
canvas.NewImageFromResource(resource)
애플리케이션에 포함된 리소스에서 이미지를 불러옵니다.
이미지 크기 조정 옵션
ImageFillContain: 이미지가 비율을 유지하며 컨테이너 안에 맞게 조정됩니다.
ImageFillOriginal: 원본 크기로 이미지를 표시합니다.
ImageFillStretch: 이미지가 컨테이너 크기에 맞게 늘어나거나 줄어듭니다.
img.FillMode = canvas.ImageFillContain
크기 설정
img.SetMinSize(fyne.NewSize(width, height))
이미지의 최소 크기를 설정합니다.컨테이너 레이아웃이나 layout.NewSpacer()를 사용하여 이미지 크기를 자동으로 조정할 수도 있습니다.
레이아웃 사용
사진을 컨테이너에 배치하여 정렬할 수 있습니다.
container.NewVBox(img) - 수직 배치.
container.NewHBox(img) - 수평 배치.
container.NewGridWithColumns(cols, img1, img2, img3) - 열 기반 배치.
content := container.NewVBox(
canvas.NewImageFromFile("photo1.jpg"),
canvas.NewImageFromFile("photo2.jpg"),
)
스크롤 컨테이너
많은 사진을 표시할 경우 스크롤 가능하게 만들 수 있습니다
scroll := container.NewScroll(content)
중앙 배치
container.NewCenter(img)
이미지를 화면 중앙에 배치합니다.
이미지 클릭 이벤트
이미지를 클릭할 수 있는 기능은 widget.NewButton과 canvas.NewImage*를 조합하여 구현할 수 있습니다.
btn := widget.NewButton("", func() {
fmt.Println("이미지가 클릭되었습니다.")
})
btn.Icon = canvas.NewImageFromFile("example.jpg")
이미지 슬라이드쇼
이미지 배열을 widget.NewCarousel()과 같은 구조로 순서대로 표시할 수 있습니다. (Fyne에 기본 제공은 없지만 수작업으로 구현 가능.)
var images []*canvas.Image
images = append(images, canvas.NewImageFromFile("photo1.jpg"))
images = append(images, canvas.NewImageFromFile("photo2.jpg"))
img := images[0]
img.FillMode = canvas.ImageFillContain
이미지 목록을 스크롤로 표시
photoList := container.NewVBox()
for _, path := range []string{"photo1.jpg", "photo2.jpg"} {
img := canvas.NewImageFromFile(path)
img.FillMode = canvas.ImageFillContain
photoList.Add(img)
}
scroll := container.NewScroll(photoList)