GUi 图形化
这里只使用 fyne 库其他库不讨论。配置配置GCC我下载的Gcc版本拿这个来配置的好处就是不用安装直接下载解压然后配置环境变量即可运⾏时需要开启CGO_ENABLED1go env -w CGO_ENABLED1 # 解释 Fyne 的相关源码⽂件带有 cgo 构建标签。你如果把 CGO_ENABLED0 关掉了带该标签的源码会被排除编译器要么找不到实现要么⾛到不兼容的路径从⽽出现“build constraints exclude all Go files” 之类的错误。 反正跟着来就行了看你使用的是什么环境我使用的windows我要切换编译平台回来go env -w GOOSwindows # 若是linux就修改linux编写一个 “Hello Fyne” 简单窗口当然创建go项目的时候记得go mod init 项目名; go mod tidypackage main import ( fyne.io/fyne/v2 fyne.io/fyne/v2/app fyne.io/fyne/v2/widget ) func main() { myApp : app.New() myWin : myApp.NewWindow(Hello) myWin.SetContent(widget.NewLabel(Hello Fyne!)) myWin.Resize(fyne.NewSize(200, 200)) myWin.ShowAndRun() }运行代码之前一定要重新打开一下你的vscode或者你的代码编辑器或者终端为了让之前设置的环境变量生效# 再次运行代码 go run main.go 下图中我的fyne没有用v2我后面换了我上面代码是正确的只是图片中我忘记切换新版本的库了第一个GUIfunc first_gui() { myApp : app.New() // 创建一个app myWin : myApp.NewWindow(Hello) // 创建一个窗口之后就要放内容进这个窗口了同时给这个窗口命名 myWin.SetContent(widget.NewLabel(Hello Fyne!)) //简单设置一个标签内容然后用窗口的SetContent设置内容 myWin.Resize(fyne.NewSize(200, 200)) // 设置窗口大小 myWin.ShowAndRun() // Show显示和Run运行这里其实是可以分开用两个函数执行ShowAndRun就是一个命令执行了两个 }没什么好说直接看代码来的直接常用 widget 组件widget.NewLabel标签组件这个就是标签文本widget.NewButton按钮第二个参数传入函数表示这个按钮被点击后的action动作widget.NewEntry组件实体控件用于给用户输入简单的文本内容SetReadOnly(true/false)设置是否只读SetPlaceHolder设置占位字符widget.NewEntry().MultiLine true这样设置可以多行文本widget.NewPasswordEntry密码输入框这个和widget.NewEntry一样只不过这里是密码的方式输入所以输入的内容看不到NewMultiLineEntry多行文本输入但其实上面也可以通过MultiLine true的方式进行多行输入widget.NewCheck复选框widget.NewRadioGroup单选框旧版本好像是widget.NewRadiov2的就用widget.NewRadioGroupwidget.NewSelect下拉框widget.NewSlider滑块widget.NewProgressBar进度条通过SetValue来控制进度条的滑动widget.NewProgressBarInfinite无限进度条widget.NewSeparator分割线widget.NewVBox简单的水平或垂直的容器Box可以对放入box的控件采用布局widget.NewCard卡片给标题和这个卡片的内容目前可以简单的通过container来new一个box进行整合控件在某个容器里看下面的代码案例中最后return即可在basicWidgets函数中穿插下containercontainer.NewVBox和 【container.NewScroll、container.NewHScroll】container.NewVBox这个很重要因为我们可以打包空间在这个box里面然后这个box就可以作为某个模块插入到你想要的功能看模块中去了当然这里使用的是VBoxV表示垂直的布局后面会学到HBox表示水平布局container.NewScroll这个是整合box的时候container作为上下滑动还是左右滑动通过传入VBox还是HBox来判断左右还是上下滑动一般都是VBox上下滑动因为我们习惯就是这样比较好看。widget.NewSelectEntry可输入的下拉框widget.NewAccordion父折叠面板子通过widget.NewAccordionItem来创建展开后的面板项目widget.NewForm表单这里看代码吧涉及到提交和取消函数// Form - 表单 nameEntry : widget.NewEntry() ageEntry : widget.NewEntry() genderRadio : widget.NewRadioGroup([]string{男, ⼥}, nil) form : widget.NewForm( widget.NewFormItem(姓名, nameEntry), widget.NewFormItem(年龄, ageEntry), widget.NewFormItem(性别, genderRadio), ) form.OnSubmit func() { fmt.Printf(表单提交 - 姓名: %s, 年龄: %s, 性别: %s\n, nameEntry.Text, ageEntry.Text, genderRadio.Selected) } form.OnCancel func() { fmt.Println(表单取消) }widget.NewTabContainer标签容器这个可以理解为像浏览器不同窗口之间切换的样子这个显示的标签可以修改位置平时浏览器的窗口都是显示在上方这里修改的位置就是窗口的那个位置TabLocationBottom显示在底部TabLocationLeading显示在顶部左边TabLocationTrailing显示在顶部右边直接看一段简单的伪代码tabs : widget.NewTabContainer( widget.NewTabItem(Profile, profile), widget.NewTabItem(Setting, setting), ) myWindow.SetContent(tabs)widget.NewToolbar工具栏很简单的用法就是NewToolbarAction创建然后第一个参数给图标第二个参数给action动作直接看下面的代码func fyne_toolbar() { myApp : app.New() myWindow : myApp.NewWindow(Toolbar) toolbar : widget.NewToolbar( widget.NewToolbarAction(theme.DocumentCreateIcon(), func() { fmt.Println(New document) }), widget.NewToolbarSeparator(), widget.NewToolbarAction(theme.ContentCutIcon(), func() { fmt.Println(Cut) }), widget.NewToolbarAction(theme.ContentCopyIcon(), func() { fmt.Println(Copy) }), widget.NewToolbarAction(theme.ContentPasteIcon(), func() { fmt.Println(Paste) }), widget.NewToolbarSpacer(), widget.NewToolbarAction(theme.HelpIcon(), func() { log.Println(Display help) }), ) content : fyne.NewContainerWithLayout( layout.NewBorderLayout(toolbar, nil, nil, nil), toolbar, widget.NewLabel(Lorem ipsum dolor, sit amet consectetur adipisicing elit. Quidem consectetur ipsam nesciunt, quasi sint expedita minus aut, porro iusto magnam ducimus voluptates cum vitae. Vero adipisci earum iure consequatur quidem.), ) myWindow.SetContent(content) myWindow.ShowAndRun() }