使用 github.com/lxn/walk 写一个类似记事本打开文件的操作
===========================================================
editor.go
===========================================================
package main
import (
"log"
"editor/Abouter" //关于按钮相关
"editor/Opener" //打开按钮相关
"github.com/lxn/walk"
. "github.com/lxn/walk/declarative"
)
func main() {
if _,err:= (MainWindow{
AssignTo: &Opener.Mw.MainWindow,
Title: "NoteBook",
MenuItems: []MenuItem{
Menu{
Text: "&File",
Items: []MenuItem{
Action{
Text: "&NewFile",
},
Action{
AssignTo: &openAction,
Text: "&Open",
//Image: "/img/open.png",
OnTriggered: Opener.Mw.OpenAction_Triggered,
},
Separator{},
Action{
Text: "Exit",
OnTriggered: func() { Opener.Mw.Close() },
},
},
},
Menu{
Text: "&Help",
Items: []MenuItem{
Action{
Text: "About",
OnTriggered: Abouter.AboutAction_Triggered,
},
},
},
},
MinSize: Size{320, 240},
Size: Size{800, 600},
Layout: VBox{MarginsZero: true},
Children: []Widget{
HSplitter{
Children: []Widget{
TextEdit{
AssignTo: &Opener.Te,
HScroll: true,
VScroll: true,
},
},
},
},
}.Run()); err != nil {
log.Fatal(err)
}
}
===========================================================
Opener.go
===========================================================
package Opener
import (
"encoding/csv"
"log"
"os"
"github.com/axgle/mahonia"
"github.com/golang/glog"
"github.com/lxn/walk"
)
var Te*walk.TextEdit
var Mw=new(MyMainWindow)
type MyMainWindow struct {
*walk.MainWindow
prevFilePath string
}
func (Mw *MyMainWindow)OpenAction_Triggered() {
err := Te.SetText("")// 以便于清空文本框原有的内容
if err !=nil {
glog.Error("SetText() clear content :", err)
}
if err:= Mw.OpenFile(); err!=nil {
log.Print(err)
}
//max := te.MaxLength()
//fmt.Println("max = ", max)
}
func GetCSV(csvPathstring) [][]string {
file, err:= os.Open(csvPath)
if err !=nil {
glog.Error("Error when open file in GetCSV():", err)
return nil
}
defer file.Close()
decoder := mahonia.NewDecoder("gbk")// 把原来ANSI格式的文本文件里的字符,用gbk进行解码。
//r := csv.NewReader(file)
r := csv.NewReader(decoder.NewReader(file))// 这样,最终返回的字符串就是utf-8了。(go只认utf8)
res, err:= r.ReadAll()
if err !=nil {
glog.Error("Error when read csv in GetCSV():", err)
return nil
}
return res
}
func (Mw *MyMainWindow)OpenFile()error {
dlg :=new(walk.FileDialog)
//var te *walk.TextEdit
dlg.FilePath = Mw.prevFilePath
dlg.Filter = "txt Files (*.txt)|*.txt"
dlg.Title = "Select an file"
if ok,err:= dlg.ShowOpen(Mw); err!=nil {
return err
} else if!ok {
return nil
}
Mw.prevFilePath = dlg.FilePath
content :=GetCSV(Mw.prevFilePath)
for i,_:= range content {
//te.AppendText(content[i][0])
AppendChangeText(content[i][0])
}
return nil
}
func AppendChangeText(valuestring) {
start, end:= Te.TextSelection()
len := Te.TextLength()
Te.SetTextSelection(len, len)
Te.ReplaceSelectedText(value+"\n",true)
Te.SetTextSelection(start, end)
}
=============================================================
Abouter.go
=============================================================
package Abouter
import (
"editor/Opener"
"github.com/lxn/walk"
)
func AboutAction_Triggered() {
walk.MsgBox(Opener.Mw, "About", "Walk Image Viewer Example", walk.MsgBoxIconInformation)
}
执行效果图:
版权声明:本文为impressionw原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。