fyne 开发笔记

安装

go mod init fyneDemo
go get fyne.io/fyne

点击使用看云阅读

各种软件包说明

fyne

  1. 用途:提供所有fyne代码中共有的基本定义,包含数据类型和接口
  2. 命令 说明
    fyne.NewSize(200, 400) 设置应用的宽高,需配合widget使用
    fyne.NewPos(20, 20) 设置一个偏移量
    container := fyne.NewContainer(text1, text2, text3) 新建一个容器

app

  1. 用途:提供用于启动新应用程序的api
  2. 命令 说明
    myApp := app.New() 新建一个应用
    myWindow := myApp.NewWindow("hello") 新建一个窗口
    myWindow.ShowAndRun() 显示窗口,并运行,等同于myWindow.Show()myApp.Run(),若有第二个窗口,则第二个窗口只可调用myWindow.Show()方法
    myWindow.SetContent() 给窗口设置内容

widget

  1. 用途:提供各种各样的小部件(如按钮、标签等)
    命令 说明
    w.Resize(fyne.NewSize(200, 400)) 设置宽高
    widget.NewHyperlink("百度", url) 设置一个超链接,需配合url, _ := url.Parse("http://www.baidu.com")使用
    content := widget.NewLabel("text") 设置一段文字
    content := widget.NewButton("click me", clickFunc()) 设置一个按钮,clickFunc()为点击事件后进行的操作
    content := widget.NewButtonWithIcon("Home", theme.HomeIcon(), clickFunc()) 设置一个带图标的点击按钮
    content := widget.NewVBox() 创建一个盒子
    content.Append() 追加元素
    input := widget.NewEntry() 设置一个输入框
    textArea := widget.NewMultiLineEntry() 设置多行输入框
    input.SetPlaceHolder("Enter text...") 设置输入框的提示内容
    check := widget.NewCheck("Optional", test() 设置复选框
    radio := widget.NewRadio([]string{"Option 1", "Option 2"}, test()) 设置单选框
    combo := widget.NewSelect([]string{"Option 1", "Option 2"}, test()) 设置select选择器
    progress := widget.NewProgressBar() 设置进度条
    progress.SetValue(i) 设置进度
    infinite := widget.NewProgressBarInfinite() 设置无限进度条

设置一个表单

form := &widget.Form{
        Items: []*widget.FormItem{ // we can specify items in the constructor
            {"Entry", entry}},
        OnSubmit: func() { // optional, handle form submission
            log.Println("Form submitted:", entry.Text)
            log.Println("multiline:", textArea.Text)
            myWindow.Close()
        },
    }

    // we can also append items
    form.Append("Text", textArea)

设置tab栏

tabs := widget.NewTabContainer(
   widget.NewTabItem("Tab 1", widget.NewLabel("Hello")),
  widget.NewTabItem("Tab 2", widget.NewLabel("World!")))
tabs.SetTabLocation(widget.TabLocationLeading) // 设置为竖向的tab

设置工具栏

toolbar := widget.NewToolbar(
        widget.NewToolbarAction(theme.DocumentCreateIcon(), func() {
            log.Println("New document")
        }),
        widget.NewToolbarSeparator(),
        widget.NewToolbarAction(theme.ContentCutIcon(), func() {}),
        widget.NewToolbarAction(theme.ContentCopyIcon(), func() {}),
        widget.NewToolbarAction(theme.ContentPasteIcon(), func() {}),
        widget.NewToolbarSpacer(),
        widget.NewToolbarAction(theme.HelpIcon(), func() {
            log.Println("Display help")
        }),
    )

    content := fyne.NewContainerWithLayout(layout.NewBorderLayout(toolbar, nil, nil, nil),
        toolbar, widget.NewLabel("Content"))

canvas

  1. 用途:提供绘图api
    命令 说明
    myCanvas := myWindow.Canvas() 创建一个新画布
    text := canvas.NewText("Text", color.White) 创建白色的文字
    text.TextStyle.Bold = true 设置文字的样式
    text2.Move(fyne.NewPos(20, 20)) 移动文字
    canvas.NewRectangle(color.Black) 创建一个矩形
    canvas.NewLine(color.Gray{0x66}) 创建一条线段
    circle := canvas.NewCircle(color.White) 创建一个圆
    canvas.NewImageFromResource(theme.FyneLogo()) 创建一个图片资源
    myCanvas.SetContent(text) 将文字添加到画布上

dialog

  1. 用途:处理弹出框
    设置一个询问按钮
    dialog.NewConfirm("标题", "内容", func(checked bool) {
    fmt.Println("333")
    }, myWindow)

layout

  1. 用途:提供各种布局使用的容器
    设置grid布局
     text1 := canvas.NewText("1", color.White)
     text2 := canvas.NewText("2", color.White)
     text3 := canvas.NewText("3", color.White)
     grid := fyne.NewContainerWithLayout(layout.NewGridLayout(2),
         text1, text2, text3)
    设置fixed布局
     text1 := canvas.NewText("1", color.White)
     text2 := canvas.NewText("2", color.White)
     text3 := canvas.NewText("3", color.White)
     grid := fyne.NewContainerWithLayout(layout.NewFixedGridLayout(fyne.NewSize(50, 50)),
         text1, text2, text3)
    设置边界布局
     top := canvas.NewText("top bar", color.White)
     left := canvas.NewText("left", color.White)
     middle := canvas.NewText("content", color.White)
     content := fyne.NewContainerWithLayout(layout.NewBorderLayout(top, nil, left, nil),
         top, left, middle)
    设置表单布局
     label1 := canvas.NewText("Label 1", color.Black)
     value1 := canvas.NewText("Value", color.White)
     label2 := canvas.NewText("Label 2", color.Black)
     value2 := canvas.NewText("Something", color.White)
     grid := fyne.NewContainerWithLayout(layout.NewFormLayout(),
         label1, value1, label2, value2)
    设置居中布局
     img := canvas.NewImageFromResource(theme.FyneLogo())
     img.FillMode = canvas.ImageFillOriginal
     text := canvas.NewText("Overlay", color.Black)
     content := fyne.NewContainerWithLayout(layout.NewCenterLayout(),
         img, text)
    设置占满布局
     img := canvas.NewImageFromResource(theme.FyneLogo())
     text := canvas.NewText("Overlay", color.Black)
     content := fyne.NewContainerWithLayout(layout.NewMaxLayout(),
         img, text)

test

  1. 用途:测试包
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!