美文网首页
go fyne简单的圆钢重量计算器

go fyne简单的圆钢重量计算器

作者: scckele | 来源:发表于2021-12-04 18:18 被阅读0次

    理想图:

    image.png
    实际图:
    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)的使用。

    相关文章

      网友评论

          本文标题:go fyne简单的圆钢重量计算器

          本文链接:https://www.haomeiwen.com/subject/bhfwxrtx.html