github.com/lxn/walk 写打开文件

来源:互联网 发布:cydia 数据库错误 编辑:程序博客网 时间:2024/05/21 07:56

使用 github.com/lxn/walk 写一个类似记事本打开文件的操作


===========================================================
editor.go
===========================================================

package mainimport (    "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 Openerimport (    "encoding/csv"    "log"    "os"    "github.com/axgle/mahonia"    "github.com/golang/glog"    "github.com/lxn/walk")var Te*walk.TextEditvar 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 Abouterimport (    "editor/Opener"    "github.com/lxn/walk")func AboutAction_Triggered() {    walk.MsgBox(Opener.Mw, "About", "Walk Image Viewer Example", walk.MsgBoxIconInformation)}



 

执行效果图:





原创粉丝点击