软件包widget定义了许多小部件
import "fyne.io/fyne/v2/widget"Accordion 下拉框
定义
type Accordion struct {
BaseWidget
// 项目
Items []*AccordionItem
// 是否同时打开多个项目
MultiOpen bool
}示例
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/widget"
"image/color"
"strconv"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
a1 := widget.NewAccordion()
for i := 0; i < 3; i++ {
a3 := widget.NewAccordion()
for j := 0; j < 4; j++ {
s := strconv.Itoa(i) + strconv.Itoa(j)
a3.Append(widget.NewAccordionItem(s, canvas.NewText(s, color.White)))
}
a2 := widget.NewAccordionItem(strconv.Itoa(i), a3)
a1.Append(a2)
}
Window.SetContent(a1)
Window.ShowAndRun()
}
Button 按钮
定义
type Button struct {
DisableableWidget
// 按钮的文本或图标
Text string
Icon fyne.Resource
// 按钮突出程度
Importance ButtonImportance
// 按钮对齐方式
Alignment ButtonAlign
// 图标位置
IconPlacement ButtonIconPlacement
// 按钮绑定的函数
OnTapped func() `json:"-"`
}示例
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
l := widget.NewLabel("hello")
b := widget.NewButton("world", func() {
l.Text = "world"
l.Refresh()
})
box := container.NewVBox()
box.Add(l)
box.Add(b)
Window.SetContent(box)
Window.ShowAndRun()
}
Card 卡片
定义
type Card struct {
BaseWidget
// 标题
Title, Subtitle string
// 图片
Image *canvas.Image
// 内容
Content fyne.CanvasObject
}示例
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/widget"
"image/color"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
c := widget.NewCard("Hello", "World", canvas.NewCircle(color.White))
Window.SetContent(c)
Window.ShowAndRun()
}
Check 选择框
定义
type Check struct {
DisableableWidget
// 文本
Text string
// 当前选择状态
Checked bool
// 触发时的函数
OnChanged func(bool) `json:"-"`
}示例
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
l := widget.NewLabel("Hello")
c := widget.NewCheck("World", func(b bool) {
if b {
l.Text = "World"
l.Refresh()
} else {
l.Text = "Hello"
l.Refresh()
}
})
box := container.NewVBox()
box.Add(l)
box.Add(c)
Window.SetContent(box)
Window.ShowAndRun()
}
CheckGroup 多选框
定义
type CheckGroup struct {
DisableableWidget
// 选项是否水平排列
Horizontal bool
// 是否至少选择一个
Required bool
// 触发时的函数,传入被选择字符串的列表
OnChanged func([]string) `json:"-"`
// 选项列表
Options []string
// 被选择字符串的列表
Selected []string
}示例
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
l := widget.NewLabel("")
ss := []string{"A", "B", "C"}
c := widget.NewCheckGroup(ss, func(s []string) {
l.Text = ""
for _, i := range s {
l.Text += i
}
l.Refresh()
})
box := container.NewVBox()
box.Add(l)
box.Add(c)
Window.SetContent(box)
Window.ShowAndRun()
}
Entry 输入框
定义
type Entry struct {
DisableableWidget
// 文本
Text string
// 文本样式
TextStyle fyne.TextStyle
PlaceHolder string
// 触发函数
OnChanged func(string) `json:"-"`
OnSubmitted func(string) `json:"-"`
// 输入框类型
Password bool
MultiLine bool
// 其它参数
Wrapping fyne.TextWrap
Validator fyne.StringValidator `json:"-"`
CursorRow, CursorColumn int
OnCursorChanged func() `json:"-"`
ActionItem fyne.CanvasObject `json:"-"`
}示例
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
l := widget.NewLabel("")
e := widget.NewEntry()
e.OnChanged = func(s string) {
l.Text = e.Text
l.Refresh()
}
box := container.NewVBox()
box.Add(l)
box.Add(e)
Window.SetContent(box)
Window.ShowAndRun()
}
Form 表单
定义
type Form struct {
BaseWidget
// 表单内容
Items []*FormItem
// 提交函数
OnSubmit func() `json:"-"`
// 取消函数
OnCancel func() `json:"-"`
// 提交按钮文本
SubmitText string
// 取消按钮文本
CancelText string
}示例
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
box := container.NewVBox()
l := widget.NewLabel("")
f := widget.NewForm()
hello := widget.NewEntry()
world := widget.NewEntry()
f.AppendItem(widget.NewFormItem("hello", hello))
f.Append("world", world)
f.OnSubmit = func() {
s := hello.Text + world.Text
l.Text = s
l.Refresh()
}
f.Refresh()
box.Add(l)
box.Add(f)
Window.SetContent(box)
Window.ShowAndRun()
}
Hyperlink 超链接
定义
type Hyperlink struct {
BaseWidget
// 文本
Text string
// 连接
URL *url.URL
// 对齐方式
Alignment fyne.TextAlign
// 文本包装
Wrapping fyne.TextWrap
// 文本样式
TextStyle fyne.TextStyle
// 点击时触发
OnTapped func() `json:"-"`
}示例
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/widget"
"net/url"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
h := widget.NewHyperlink("Hello", &url.URL{Path: "http://leafbackaut.cn"})
Window.SetContent(h)
Window.ShowAndRun()
}
Label 标签
定义
type Label struct {
BaseWidget
// 文本
Text string
// 对齐方式
Alignment fyne.TextAlign
// 文本包装
Wrapping fyne.TextWrap
// 文本样式
TextStyle fyne.TextStyle
}示例
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
l := widget.NewLabel("Hello")
Window.SetContent(l)
Window.ShowAndRun()
}
List 列表
定义
type List struct {
BaseWidget
// 可以用来重写的函数
Length func() int `json:"-"`
CreateItem func() fyne.CanvasObject `json:"-"`
UpdateItem func(id ListItemID, item fyne.CanvasObject) `json:"-"`
OnSelected func(id ListItemID) `json:"-"`
OnUnselected func(id ListItemID) `json:"-"`
}示例
使用NewList创建新的列表,参数分别代表创建列表长度,创建列表单个元素的内容,更新每个列表元素的函数
func NewList(length func() int, createItem func() fyne.CanvasObject, updateItem func(ListItemID, fyne.CanvasObject)) *List一个列表
package main
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
var data = []string{"a", "b", "c"}
l := widget.NewList(func() int {
return len(data)
}, func() fyne.CanvasObject {
return widget.NewLabel("Hello")
}, func(id widget.ListItemID, object fyne.CanvasObject) {
object.(*widget.Label).SetText(data[id])
})
Window.SetContent(l)
Window.ShowAndRun()
}
Menu 菜单
定义
type Menu struct {
BaseWidget
// 菜单内容
Items []fyne.CanvasObject
OnDismiss func()
}示例
package main
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
m := widget.NewMenu(fyne.NewMenu("Menu"))
m.Items = append(m.Items, widget.NewLabel("hello"))
m.Items = append(m.Items, widget.NewLabel("World"))
Window.SetContent(m)
Window.ShowAndRun()
}
ProgressBar 进度条
定义
type ProgressBar struct {
BaseWidget
// 最小值,最大值,当前值
Min, Max, Value float64
// 自定义文本样式
TextFormatter func() string `json:"-"`
}示例
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
p := widget.NewProgressBar()
p.Max = 10
p.Min = 0
p.Value = 6
Window.SetContent(p)
Window.ShowAndRun()
}
RadioGroup 单选列表
定义
type RadioGroup struct {
DisableableWidget
// 排列方式
Horizontal bool
// 是否必选一个
Required bool
// 选择时调用这个函数,传入一个字符串
OnChanged func(string) `json:"-"`
// 选项列表
Options []string
// 被选的字符串
Selected string
}示例
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
box := container.NewVBox()
l := widget.NewLabel("")
c := []string{"Hello", "World"}
r := widget.NewRadioGroup(c, func(s string) {
l.Text = s
l.Refresh()
})
box.Add(l)
box.Add(r)
Window.SetContent(box)
Window.ShowAndRun()
}
RichText 富文本
定义
type RichText struct {
BaseWidget
// 富文本标记
Segments []RichTextSegment
Wrapping fyne.TextWrap
Scroll widget.ScrollDirection
}示例
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
box := container.NewVBox()
m := widget.NewRichTextFromMarkdown("## Hello")
t := widget.NewRichTextWithText("World")
box.Add(m)
box.Add(t)
Window.SetContent(box)
Window.ShowAndRun()
}
Select 选择框
定义
type Select struct {
DisableableWidget
// 对齐方式
Alignment fyne.TextAlign
// 当前选择的字符串
Selected string
// 选项列表
Options []string
PlaceHolder string
// 单击选项调用函数
OnChanged func(string) `json:"-"`
}示例
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
box := container.NewVBox()
l := widget.NewLabel("")
var o = []string{"A", "B", "c"}
s := widget.NewSelect(o, func(s string) {
l.Text = s
l.Refresh()
})
s.PlaceHolder = "Hello World"
box.Add(l)
box.Add(s)
Window.SetContent(box)
Window.ShowAndRun()
}
SelectEntry 输入选择框
定义
type SelectEntry struct {
// 输入框
Entry
dropDown *fyne.Menu
popUp *PopUpMenu
// 选项列表
options []string
}示例
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
box := container.NewVBox()
var o = []string{"A", "B", "C"}
s := widget.NewSelectEntry(o)
box.Add(s)
Window.SetContent(box)
Window.ShowAndRun()
}
Slider 滑块
定义
type Slider struct {
BaseWidget
// 一些值
Value float64
Min float64
Max float64
Step float64
// 方向,垂直或水平
Orientation Orientation
// 数据改变时触发函数
OnChanged func(float64)
}示例
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
"strconv"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
box := container.NewVBox()
l := widget.NewLabel("")
s := widget.NewSlider(1, 10)
s.Step = 0.01
s.OnChanged = func(f float64) {
l.Text = strconv.FormatFloat(f, 'f', 3, 64)
l.Refresh()
}
box.Add(l)
box.Add(s)
Window.SetContent(box)
Window.ShowAndRun()
}
Table 表格
定义
type Table struct {
BaseWidget
// 一些参数
Length func() (int, int) `json:"-"`
CreateCell func() fyne.CanvasObject `json:"-"`
UpdateCell func(id TableCellID, template fyne.CanvasObject) `json:"-"`
OnSelected func(id TableCellID) `json:"-"`
OnUnselected func(id TableCellID) `json:"-"`
}示例
package main
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
var data = [][]string{{"A", "B", "C"}, {"D", "E", "F"}, {"G", "H", "I"}}
t := widget.NewTable(func() (int, int) {
return len(data), len(data[0])
}, func() fyne.CanvasObject {
return widget.NewLabel("")
}, func(id widget.TableCellID, object fyne.CanvasObject) {
object.(*widget.Label).SetText(data[id.Col][id.Row])
})
Window.SetContent(t)
Window.ShowAndRun()
}
TextGrid 文本网格
定义
type TextGrid struct {
BaseWidget
// 每一行的元素
Rows []TextGridRow
// 是否显示行数
ShowLineNumbers bool
// 是否在空格处打点
ShowWhitespace bool
// Tab键的宽度
TabWidth
}示例
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
t := widget.NewTextGrid()
var cell1 []widget.TextGridCell
var hello = []rune("Hello")
for _, s := range hello {
cell1 = append(cell1, widget.TextGridCell{Rune: s})
}
var cell2 []widget.TextGridCell
var world = []rune(" World")
for _, s := range world {
cell2 = append(cell2, widget.TextGridCell{Rune: s})
}
row1 := widget.TextGridRow{
Cells: cell1,
Style: nil,
}
row2 := widget.TextGridRow{
Cells: cell2,
Style: nil,
}
t.SetRow(0, row1)
t.SetRow(1, row2)
t.ShowLineNumbers = true
t.ShowWhitespace = true
Window.SetContent(t)
Window.ShowAndRun()
}
Toolbar 工具栏
定义
type Toolbar struct {
BaseWidget
// 工具栏选项
Items []ToolbarItem
}示例
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("test")
box := container.NewBorder(t, nil, nil, nil, nil)
t := widget.NewToolbar()
t.Append(widget.NewToolbarAction(theme.HomeIcon(), func() {}))
t.Append(widget.NewToolbarSeparator())
t.Append(widget.NewToolbarAction(theme.AccountIcon(), func() {}))
t.Append(widget.NewToolbarAction(theme.HelpIcon(), func() {}))
Window.SetContent(box)
Window.ShowAndRun()
}