golang中使用walk展示二维码图片

图片说明

**我的需求是点击生成二维码 在下面展示二维码。

部分代码如下,初学golang 请教各位大佬


type MyMainWindow struct {
    *walk.MainWindow
    hcName   *walk.Label
    userIdName   *walk.Label
    startTime *walk.DateEdit
    endTime *walk.DateEdit
    hc, userId *walk.LineEdit
    imageView *walk.ImageView
    imageComposite *walk.Composite
    qrCount int
}

func (mw *MyMainWindow) ShowQRcode() {
    if mw.imageComposite != nil {
        mw.imageComposite.Dispose()
    }
    mw.getQRcode()
    widgets := []Widget{}
    for i:=1;i<=mw.qrCount;i++ {
        bitmap, err := walk.NewBitmapFromFile("qrcode/qr_"+strconv.Itoa(i)+".jpg")
        log.Println("qrcode/qr_"+strconv.Itoa(i)+".jpg")
        if err != nil {
            walk.MsgBox(mw, mw.Title(), err.Error(), walk.MsgBoxIconError)
            break
        }
        widget := ImageView{
            Image: bitmap,
            Mode:  ImageViewModeZoom,
        }
        widgets = append(widgets, widget)
    }
    imageComposite := Composite{
        AssignTo: &mw.imageComposite,
        Layout:   HBox{},
        Children: widgets,
    }
    if err := imageComposite.Create(NewBuilder(mw)); err != nil {
        log.Println(err)
    }
}

func openWindow(){
    mw := &MyMainWindow{}
    _, _ = MainWindow{
        Title:   "梅清打印量上报",
        MinSize: Size{600, 400},
        Size:Size{1200,800},
        Layout:  VBox{MarginsZero: true},
        Children: []Widget{
            Composite{
                Layout:HBox{},
                Children: []Widget{
                    Label{AssignTo: &mw.hcName,Text: "医院编号"},
                    LineEdit{AssignTo: &mw.hc,},
                    Label{AssignTo: &mw.userIdName,Text: "工程师编号"},
                    LineEdit{AssignTo: &mw.userId,},
                    DateEdit{AssignTo:&mw.startTime, Format:"yyyy-MM-dd",},
                    DateEdit{AssignTo:&mw.endTime, Format:"yyyy-MM-dd",},
                    PushButton{
                        Text: "生成二维码",
                        OnClicked: func(){
                            if len(mw.hc.Text()) == 0 {
                                walk.MsgBox(mw, mw.Title(), "请输入医院编号", walk.MsgBoxIconError)
                                log.Println("请输入医院编号")
                                return
                            }
                            if len(mw.userId.Text()) == 0 {
                                walk.MsgBox(mw, mw.Title(), "请输入工程师编号", walk.MsgBoxIconError)
                                log.Println("请输入工程师编号")
                                return
                            }
                            mw.ShowQRcode()
                        },
                    },
                },
            },
            Composite{
                AssignTo:&mw.imageComposite,
                Layout:HBox{},
            },
        },
    }.Run()
}

这是报错信息
图片说明

https://blog.csdn.net/wangshubo1989/article/details/78466869

1.1 效果图

图片说明

1.2 代码

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()
}