Fyne 是一个用于构建跨平台 GUI 应用程序的 Go 语言框架。它提供了多种布局组件,用于管理和排列窗口中的控件。Fyne 的布局组件可以帮助开发者轻松地创建响应式和美观的用户界面。以下是 Fyne 中常用的布局组件的详细讲解:

1. VBoxHBox

  • VBox:垂直布局,将控件从上到下排列。
  • HBox:水平布局,将控件从左到右排列。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

func main() {
    a := app.New()
    w := a.NewWindow("VBox and HBox Example")

    btn1 := widget.NewButton("Button 1", func() {})
    btn2 := widget.NewButton("Button 2", func() {})
    btn3 := widget.NewButton("Button 3", func() {})

    vbox := container.NewVBox(btn1, btn2, btn3)
    hbox := container.NewHBox(btn1, btn2, btn3)

    w.SetContent(container.NewVBox(vbox, hbox))
    w.ShowAndRun()
}

2. GridLayout

  • GridLayout:网格布局,将控件排列在网格中。可以指定行数和列数。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

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

    btn1 := widget.NewButton("Button 1", func() {})
    btn2 := widget.NewButton("Button 2", func() {})
    btn3 := widget.NewButton("Button 3", func() {})
    btn4 := widget.NewButton("Button 4", func() {})

    grid := container.NewGridWithColumns(2, btn1, btn2, btn3, btn4)

    w.SetContent(grid)
    w.ShowAndRun()
}

3. BorderLayout

  • BorderLayout:边框布局,将控件放置在窗口的四个边框和中心位置。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

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

    top := widget.NewLabel("Top")
    bottom := widget.NewLabel("Bottom")
    left := widget.NewLabel("Left")
    right := widget.NewLabel("Right")
    center := widget.NewLabel("Center")

    border := container.NewBorder(top, bottom, left, right, center)

    w.SetContent(border)
    w.ShowAndRun()
}

4. CenterLayout

  • CenterLayout:居中布局,将控件放置在窗口的中心位置。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

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

    btn := widget.NewButton("Center Button", func() {})

    center := container.NewCenter(btn)

    w.SetContent(center)
    w.ShowAndRun()
}

5. FormLayout

  • FormLayout:表单布局,用于创建表单界面,通常用于排列标签和输入框。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

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

    name := widget.NewEntry()
    email := widget.NewEntry()

    form := &widget.Form{
        Items: []*widget.FormItem{
            {Text: "Name", Widget: name},
            {Text: "Email", Widget: email},
        },
    }

    w.SetContent(form)
    w.ShowAndRun()
}

6. Scroll

  • Scroll:滚动布局,用于在控件内容超出窗口大小时提供滚动功能。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

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

    content := widget.NewLabel("This is a long text that will require scrolling to view all of it.")
    scroll := container.NewScroll(content)

    w.SetContent(scroll)
    w.ShowAndRun()
}

7. Split

  • Split:分割布局,将窗口分割为多个部分,用户可以调整分割线的大小。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

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

    left := widget.NewLabel("Left Panel")
    right := widget.NewLabel("Right Panel")

    split := container.NewHSplit(left, right)

    w.SetContent(split)
    w.ShowAndRun()
}

8. TabContainer

  • TabContainer:选项卡布局,用于在多个选项卡之间切换内容。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

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

    tab1 := container.NewTabItem("Tab 1", widget.NewLabel("Content of Tab 1"))
    tab2 := container.NewTabItem("Tab 2", widget.NewLabel("Content of Tab 2"))

    tabs := container.NewAppTabs(tab1, tab2)

    w.SetContent(tabs)
    w.ShowAndRun()
}

9. MaxLayout

  • MaxLayout:最大化布局,将控件最大化填充整个窗口。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

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

    btn := widget.NewButton("Max Button", func() {})

    max := container.NewMax(btn)

    w.SetContent(max)
    w.ShowAndRun()
}

10. Padded

  • Padded:填充布局,为控件添加内边距。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

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

    btn := widget.NewButton("Padded Button", func() {})

    padded := container.NewPadded(btn)

    w.SetContent(padded)
    w.ShowAndRun()
}

11. Stacked

  • Stacked:堆叠布局,将控件堆叠在一起,通常用于创建重叠效果。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

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

    btn1 := widget.NewButton("Button 1", func() {})
    btn2 := widget.NewButton("Button 2", func() {})

    stacked := container.NewStack(btn1, btn2)

    w.SetContent(stacked)
    w.ShowAndRun()
}

12. AdaptiveGrid

  • AdaptiveGrid:自适应网格布局,根据窗口大小自动调整网格的行数和列数。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

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

    btn1 := widget.NewButton("Button 1", func() {})
    btn2 := widget.NewButton("Button 2", func() {})
    btn3 := widget.NewButton("Button 3", func() {})
    btn4 := widget.NewButton("Button 4", func() {})

    adaptiveGrid := container.NewAdaptiveGrid(2, btn1, btn2, btn3, btn4)

    w.SetContent(adaptiveGrid)
    w.ShowAndRun()
}

13. DocTabs

  • DocTabs:文档选项卡布局,类似于 TabContainer,但支持关闭选项卡。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

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

    tab1 := container.NewTabItem("Tab 1", widget.NewLabel("Content of Tab 1"))
    tab2 := container.NewTabItem("Tab 2", widget.NewLabel("Content of Tab 2"))

    docTabs := container.NewDocTabs(tab1, tab2)

    w.SetContent(docTabs)
    w.ShowAndRun()
}

14. ScrollVBoxScrollHBox

  • ScrollVBox:垂直滚动布局,将控件从上到下排列,并支持滚动。
  • ScrollHBox:水平滚动布局,将控件从左到右排列,并支持滚动。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

func main() {
    a := app.New()
    w := a.NewWindow("ScrollVBox and ScrollHBox Example")

    btn1 := widget.NewButton("Button 1", func() {})
    btn2 := widget.NewButton("Button 2", func() {})
    btn3 := widget.NewButton("Button 3", func() {})

    scrollVBox := container.NewScroll(container.NewVBox(btn1, btn2, btn3))
    scrollHBox := container.NewScroll(container.NewHBox(btn1, btn2, btn3))

    w.SetContent(container.NewVBox(scrollVBox, scrollHBox))
    w.ShowAndRun()
}

15. SplitVSplitH

  • SplitV:垂直分割布局,将窗口垂直分割为多个部分。
  • SplitH:水平分割布局,将窗口水平分割为多个部分。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

func main() {
    a := app.New()
    w := a.NewWindow("SplitV and SplitH Example")

    top := widget.NewLabel("Top Panel")
    bottom := widget.NewLabel("Bottom Panel")
    left := widget.NewLabel("Left Panel")
    right := widget.NewLabel("Right Panel")

    splitV := container.NewVSplit(top, bottom)
    splitH := container.NewHSplit(left, right)

    w.SetContent(container.NewVBox(splitV, splitH))
    w.ShowAndRun()
}

16. GridWrap

  • GridWrap:网格包裹布局,将控件排列在网格中,并根据窗口大小自动调整网格的行数和列数。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

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

    btn1 := widget.NewButton("Button 1", func() {})
    btn2 := widget.NewButton("Button 2", func() {})
    btn3 := widget.NewButton("Button 3", func() {})
    btn4 := widget.NewButton("Button 4", func() {})

    gridWrap := container.NewGridWrap(fyne.NewSize(100, 50), btn1, btn2, btn3, btn4)

    w.SetContent(gridWrap)
    w.ShowAndRun()
}

17. ScrollGrid

  • ScrollGrid:滚动网格布局,将控件排列在网格中,并支持滚动。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

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

    btn1 := widget.NewButton("Button 1", func() {})
    btn2 := widget.NewButton("Button 2", func() {})
    btn3 := widget.NewButton("Button 3", func() {})
    btn4 := widget.NewButton("Button 4", func() {})

    scrollGrid := container.NewScroll(container.NewGridWrap(fyne.NewSize(100, 50), btn1, btn2, btn3, btn4))

    w.SetContent(scrollGrid)
    w.ShowAndRun()
}

18. ScrollVScrollH

  • ScrollV:垂直滚动布局,将控件从上到下排列,并支持滚动。
  • ScrollH:水平滚动布局,将控件从左到右排列,并支持滚动。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

func main() {
    a := app.New()
    w := a.NewWindow("ScrollV and ScrollH Example")

    btn1 := widget.NewButton("Button 1", func() {})
    btn2 := widget.NewButton("Button 2", func() {})
    btn3 := widget.NewButton("Button 3", func() {})

    scrollV := container.NewScroll(container.NewVBox(btn1, btn2, btn3))
    scrollH := container.NewScroll(container.NewHBox(btn1, btn2, btn3))

    w.SetContent(container.NewVBox(scrollV, scrollH))
    w.ShowAndRun()
}

19. ScrollGridWrap

  • ScrollGridWrap:滚动网格包裹布局,将控件排列在网格中,并根据窗口大小自动调整网格的行数和列数,并支持滚动。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

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

    btn1 := widget.NewButton("Button 1", func() {})
    btn2 := widget.NewButton("Button 2", func() {})
    btn3 := widget.NewButton("Button 3", func() {})
    btn4 := widget.NewButton("Button 4", func() {})

    scrollGridWrap := container.NewScroll(container.NewGridWrap(fyne.NewSize(100, 50), btn1, btn2, btn3, btn4))

    w.SetContent(scrollGridWrap)
    w.ShowAndRun()
}

20. ScrollVBoxScrollHBox

  • ScrollVBox:垂直滚动布局,将控件从上到下排列,并支持滚动。
  • ScrollHBox:水平滚动布局,将控件从左到右排列,并支持滚动。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

func main() {
    a := app.New()
    w := a.NewWindow("ScrollVBox and ScrollHBox Example")

    btn1 := widget.NewButton("Button 1", func() {})
    btn2 := widget.NewButton("Button 2", func() {})
    btn3 := widget.NewButton("Button 3", func() {})

    scrollVBox := container.NewScroll(container.NewVBox(btn1, btn2, btn3))
    scrollHBox := container.NewScroll(container.NewHBox(btn1, btn2, btn3))

    w.SetContent(container.NewVBox(scrollVBox, scrollHBox))
    w.ShowAndRun()
}

21. ScrollGrid

  • ScrollGrid:滚动网格布局,将控件排列在网格中,并支持滚动。
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

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

    btn1 := widget.NewButton("Button 1", func() {})
    btn2 := widget.NewButton("Button 2", func() {})
    btn3 := widget.NewButton("Button 3", func() {})
    btn4 := widget.NewButton("Button 4", func() {})

    scrollGrid := container.NewScroll(container.NewGridWrap(fyne.NewSize(100, 50), btn1, btn2
每日更新-免费小火箭账号
不要错过任何机会,探索最新的应用和游戏,就在我们的平台。
立即访问
最后修改:2025 年 02 月 21 日
如果觉得我的文章对你有用,请随意赞赏