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()
}
效果: