golang ui生成二维码显示

package main
 
import (
    "log"
 
    "github.com/skip2/go-qrcode"
 
    "github.com/lxn/walk"
    . "github.com/lxn/walk/declarative"
)
 
type MyWindow struct {
    *walk.MainWindow
    urlName        *walk.Label
    url            *walk.LineEdit
    startTime      *walk.DateEdit
    endTime        *walk.DateEdit
    imageComposite *walk.Composite
}
 
func (mw *MyWindow) GetQRcode(data string) (walk.Image, error) {
    qr, err := qrcode.New(data, qrcode.Medium)
    if err != nil {
        return nil, err
    }
    image := qr.Image(256)
    bitmap, err := walk.NewBitmapFromImage(image)
    if err != nil {
        return nil, err
    }
    return bitmap, nil
}
 
func (mw *MyWindow) ShowQRcode(data ...string) {
    if mw.imageComposite != nil {
        mw.imageComposite.Dispose()
    }
 
    widgets := []Widget{}
    for _, d := range data {
        if len(d) == 0 {
            continue
        }
        image, err := mw.GetQRcode(d)
        if err != nil {
            walk.MsgBox(mw, mw.Title(), err.Error(), walk.MsgBoxIconError)
            break
        }
        widget := ImageView{
            Image: image,
            Mode:  ImageViewModeZoom,
        }
        widgets = append(widgets, widget)
    }
    imageComposite := Composite{
        AssignTo: &mw.imageComposite,
        Layout:   HBox{},
        Children: widgets,
    }
    if err := imageComposite.Create(NewBuilder(mw)); err != nil {
        log.Fatal(err)
    }
}
 
func main() {
    mw := new(MyWindow)
    if err := (MainWindow{
        AssignTo: &mw.MainWindow,
        Title:    "打印量上报",
        Size:     Size{830, 360},
        Layout:   VBox{MarginsZero: true},
        Children: []Widget{
            Composite{
                Layout: HBox{},
                Children: []Widget{
                    Label{AssignTo: &mw.urlName, Text: "URL"},
                    LineEdit{AssignTo: &mw.url, TextColor: walk.RGB(255, 0, 0)},
                    DateEdit{AssignTo: &mw.startTime, Format: "yyyy-MM-dd"},
                    DateEdit{AssignTo: &mw.endTime, Format: "yyyy-MM-dd"},
                    PushButton{Text: "生成二维码", OnClicked: func() {
                        if len(mw.url.Text()) == 0 {
                            walk.MsgBox(mw, mw.Title(), "请输入URL", walk.MsgBoxIconError)
                            return
                        }
                        mw.ShowQRcode(mw.url.Text(), mw.startTime.Date().Format("2006-01-02"), mw.endTime.Date().Format("2006-01-02"))
                    }},
                },
            },
            Composite{
                AssignTo: &mw.imageComposite,
                Layout:   HBox{},
            },
        },
    }).Create(); err != nil {
        log.Fatal(err)
    }
    mw.Run()
}
 

效果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值