20250119

Golang의 fyne 기본프로그램 함수 리스트 -golang

Golang의 fyne 기본프로그램 함수 리스트 -golang

- fyne 관련 유용한 함수 리스트

UI 레이아웃 관련

  1. container.NewVBox() - 수직으로 위젯을 배치하는 컨테이너 생성.

  2. container.NewHBox() - 수평으로 위젯을 배치하는 컨테이너 생성.

  3. container.NewGridWithRows() - 지정된 행(Row) 수로 그리드를 구성.

  4. container.NewGridWithColumns() - 지정된 열(Column) 수로 그리드를 구성.

  5. container.NewBorder() - 상하좌우에 위젯을 배치하고, 중앙에 다른 위젯을 추가.

  6. layout.NewSpacer() - UI 요소 간에 공간을 추가.


위젯 관련

  1. widget.NewLabel(text) - 단순 텍스트 레이블 생성.

  2. widget.NewEntry() - 사용자 입력을 받을 수 있는 텍스트 입력 필드 생성.

    • entry.SetPlaceHolder("텍스트를 입력하세요") - 플레이스홀더 텍스트 설정.

  3. widget.NewPasswordEntry() - 비밀번호 입력용 텍스트 필드 생성.

  4. widget.NewButton(label, func()) - 버튼 생성 및 클릭 이벤트 핸들러 등록.

  5. widget.NewSelect(options, func(value string)) - 드롭다운 목록 생성.

  6. widget.NewList() - 동적 리스트 생성.

  7. widget.NewTable() - 데이터 테이블 생성.


파일 입출력 및 데이터 관리

  1. dialog.NewFileOpen(callback, parent) - 파일 열기 대화상자 생성.

  2. dialog.NewFileSave(callback, parent) - 파일 저장 대화상자 생성.

  3. app.Preferences() - 로컬 설정 데이터를 저장하거나 가져오기 위한 Preferences 객체.

    • prefs.SetString(key, value) - 문자열 저장.

    • prefs.String(key) - 저장된 문자열 가져오기.

  4. storage.OpenFileFromURI(uri) - 지정된 URI에서 파일 열기.

  5. storage.SaveFileToURI(uri, data) - URI에 파일 저장.


이벤트 및 앱 실행

  1. app.New() - 새로운 Fyne 애플리케이션 생성.

  2. myApp.NewWindow(title) - 새로운 창(Window) 생성.

  3. window.SetContent(content) - 창의 컨텐츠 설정.

  4. window.Resize(size) - 창 크기 설정.

  5. window.Show() - 창 표시.

  6. window.ShowAndRun() - 애플리케이션 실행 및 기본 창 표시.


레이아웃 및 반응형 UI

  1. fyne.NewSize(width, height) - 특정 크기를 정의.

  2. widget.SetMinSize(size) - 최소 크기 설정.

  3. container.NewAdaptiveGrid(cols) - 반응형 그리드 생성.


기타 유용한 함수

  1. canvas.NewText(text, color) - 간단한 텍스트 생성.

  2. canvas.NewImageFromFile(path) - 이미지 파일에서 이미지 위젯 생성.

  3. fyne.CurrentApp() - 현재 실행 중인 애플리케이션 참조.

  4. 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.NewButtoncanvas.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)