go walk 两天的使用情况,心中默默放弃(英文好的,可以尝试一下)

tianlijun · · 1724 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

**go walk 两天的使用情况** 先上dome 就是代码(阅读此文章,你能了解到怎么布局及关联事件,打开文件等操作) 直接对着代码说 ``` package main import ( "bufio" "fmt" "github.com/lxn/walk" . "github.com/lxn/walk/declarative" ) #窗口实例 type MyMainWindow struct { *walk.MainWindow //窗口 edit *walk.TextEdit //文本框 } func main() { //初始化实例 mw := &MyMainWindow{} //创建 (界面编辑都在这里,这里使用的是代码布局,不知道有没有什么设计大师什么的,要是有的话,就好了) err := MainWindow{ AssignTo: &mw.MainWindow, //关联变量 Title: "文件选择框对话框", // 标题 MinSize: Size{Width: 300, Height: 200}, //最小 尺寸 MaxSize: Size{Width: 600, Height: 200}, //最大尺寸 Size: Size{Width: 600, Height: 200}, //显示尺寸 Layout: VBox{}, // 水平布局 Children: []Widget{ //内部嵌套控件 GroupBox{ //组容器 Layout: HBox{}, Children: []Widget{ LinkLabel{ //标签 Text: "文件路径:", MinSize: Size{Width: 60, Height: 20}, MaxSize: Size{Width: 60, Height: 20}, //控件大小,没有知道默认显示尺寸。就找到这个方式了,控制大小(特别不好用) }, TextEdit{ //输入文本框 Text: "请选择文件", AssignTo: &mw.edit, MinSize: Size{Width: 400, Height: 20}, MaxSize: Size{Width: 400, Height: 20}, }, PushButton{ //按钮 Text: "打开文件", MinSize: Size{Width: 60, Height: 40}, MaxSize: Size{Width: 60, Height: 40}, OnClicked: mw.selectFile, //点击事件触发函数 }, }, MinSize: Size{Width: 550, Height: 60}, //组容器的大小调节 MaxSize: Size{Width: 550, Height: 60}, }, HSplitter{ //垂直布局 Children: []Widget{ VSplitter{ //横向布局 Children: []Widget{ HSplitter{ Children: []Widget{ LinkLabel{ Text: "key:", MinSize: Size{Width: 120, Height: 20}, MaxSize: Size{Width: 120, Height: 20}, }, TextEdit{ Text: "请选择文件", AssignTo: &mw.edit, MinSize: Size{Width: 150, Height: 20}, MaxSize: Size{Width: 150, Height: 20}, }, }, }, HSplitter{ Children: []Widget{ LinkLabel{ Text: "pos:", MinSize: Size{Width: 120, Height: 40}, MaxSize: Size{Width: 120, Height: 40}, }, TextEdit{ Text: "请选择文件", AssignTo: &mw.edit, MinSize: Size{Width: 150, Height: 20}, MaxSize: Size{Width: 150, Height: 20}, }, }, }, }, }, PushButton{ MinSize: Size{Width: 10, Height: 60}, MaxSize: Size{Width: 10, Height: 60}, Text: "另存为", OnClicked: mw.saveFile, }, }, }, }, }.Create() if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } mw.Run() //执行 } // 打开文件资源,选择文件 func (mw *MyMainWindow) selectFile() { dlg := new(walk.FileDialog) dlg.Title = "选择文件" dlg.Filter = "所有文件(*.*)|*.*" mw.edit.SetText("") if ok, err := dlg.ShowOpen(mw); err != nil { mw.edit.SetText("Error: File Open\r\n") return } else if !ok { mw.edit.SetText("未选择文件\r\n") return } s := fmt.Sprintf(" %s\r\n", dlg.FilePath) mw.edit.SetText(s) } //下面的都是go 基础了 //自己编写一个函数,接收两个文件路径 srcFileName dstFileName func CopyFile(srcFileName string, dstFileName string) (written int, err error) { content, err := ioutil.ReadFile(srcFileName) if err != nil { fmt.Printf("read file err=%v", err) } //打开dstFileName dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_TRUNC, 0666) if err != nil { fmt.Printf("open file err=%v\n", err) return } defer dstFile.Close() //通过dstFile, 获取到 Writer writer := bufio.NewWriter(dstFile) // if written == 0 { // fmt.Println("读取数据为0") // return // } //输出内容 key := "zy" encrypt_stream(content, len(content), key, 4096) writer.Write(content) writer.Flush() return } func (mw *MyMainWindow) saveFile() { fmt.Println(mw.edit.Text()) fileName := "F:\\桌面\\web下载\\123.xls" //遇到的坑,不能接受的,edit.Text获取的路劲为 F:\桌面\web下载。。单斜杠的,然后后期使用贼麻烦 outfileName := "F:\\桌面\\web下载\\1234.xls" _, err := CopyFile(fileName, outfileName) if err != nil { fmt.Println("ReadBlck err ", err) } } ``` ***拒接理由*** 1、文档不友好,全英文的,没有控件效果展示,和简单案例 2、结构体内部变量文档中没有说明,需要自己看代码,选项还不明确,组件大小控制不方便 3、路径问题,win 下直接凉凉 4、之前用过qt,和qt差距太大 5、相关博客只有系统dome 案例,没有任何阅读意义,基本属于空白 ***代码只完成了一半。单walk相关代码是可以执行的*** ![walk.png](https://static.studygolang.com/200513/f8a38476feeecd2a857a8ddd9c7ebd27.png)

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1724 次点击  
加入收藏 微博
1 回复  |  直到 2020-05-14 16:19:35
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传