go fyne简单的圆钢重量计算器
2021-12-04 本文已影响0人
scckele
理想图:
实际图:
image.png
梦想图:
image.png
新建项目:Material weight calculator
main.go
package main
import (
"fmt"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"github.com/flopp/go-findfont"
"os"
"strings"
)
func main(){
//密度 长度 外径 内径 千克 吨
//Density length outer_diameter inner_diameter kg ton
//新建app项目
calculator:=app.New()
//设置窗口名称 大小
window :=calculator.NewWindow("Material weight calculator")
window.Resize(fyne.NewSize(400, 180))
calculator(window)
//运行
window.ShowAndRun()
}
//初始化字体
func init() {
fontPaths := findfont.List()
for _, path := range fontPaths {
//fmt.Println(path)
//楷体:simkai.ttf
//黑体:simhei.ttf
if strings.Contains(path, "simhei.ttf") {
_ = os.Setenv("FYNE_FONT", path)
break
}
}
fmt.Println("=============")
}
calculator.go
package main
import (
"fmt"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/data/binding"
"fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/widget"
"math"
"strconv"
)
type data struct{
d, l, o, i, w, pi float64
}
func Weight(s *data) (float64, error) {
s.o=math.Pow(s.o, 2)
s.i= math.Pow(s.i, 2)
s.pi=3.14
s.w=s.pi*(s.o-s.i)*s.l*s.d*10e-6
fmt.Println("weight :",s.w)
return s.w, nil
}
func Calculator(w fyne.Window) {
//组件区
//输入框组件
dt:=widget.NewLabel("密度")
d:=widget.NewEntry()
d.SetPlaceHolder("g/cm³")
lt:=widget.NewLabel("长度")
l := widget.NewEntry()
l.SetPlaceHolder("mm")
ot:=widget.NewLabel("外径")
o := widget.NewEntry()
o.SetPlaceHolder("mm")
it:=widget.NewLabel("内径")
i := widget.NewEntry()
i.SetPlaceHolder("mm")
outt:=widget.NewLabel("结果:")
//green := color.NRGBA{R: 0, G: 180, B: 0, A: 255}
out:=widget.NewEntry()
//单位
//vv := widget.NewLabel("g/cm³")
//mm := widget.NewLabel("mm")
//kg := widget.NewLabel("kg")
//按钮组件
button:=container.NewCenter(
widget.NewButton("求值", func() {
D, _ :=strconv.ParseFloat(d.Text,64)
L, _ :=strconv.ParseFloat(l.Text,64)
I, _ :=strconv.ParseFloat(i.Text,64)
O, _ :=strconv.ParseFloat(o.Text,64)
J := &data{D, L, O/2, I/2, 0, 3.14}
f, _ := Weight(J)
str := binding.NewString()
_ = str.Set(strconv.FormatFloat(f, 'f', 5, 32))
out.Bind(str)
}))
//容器布局区
form1:=container.New(layout.NewFormLayout(),dt,d,ot,o)
form2:=container.New(layout.NewFormLayout(),lt,l,it,i)
inputdata:=container.New(layout.NewGridLayout(2),form1,form2)
form3:=container.New(layout.NewFormLayout(),outt,out)
content := container.NewVBox(inputdata,button,form3)
//写入窗口
w.SetContent(content)
}
打包成exe
fyne package -os windows -icon logo.png
2023年01月12日:
不要使用单独的go run main.go运行,会报错
目录结构
image.png总结
主要熟悉标签组件(文本标签,带数据标签),输入框组件(NewEntry设置默认值,数据绑定),按钮组件(点击事件),布局控件(form,VBox,HBox,网格布局),容器相关方法(new,add)的使用。