Golang GUI基础1 -- JSON格式化小工具


声明:本文转载自https://my.oschina.net/90design/blog/1604349,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

What you are wasting today is tomorrow for those who died yesterday; what you hate now is the future you can not go back.

你所浪费的今天是昨天死去的人奢望的明天; 你所厌恶的现在是未来的你回不去的曾经。

本人入门Golang的gui, 只是想做一些小的工具日常工作使用, 因为对Golang的热爱已经到了如痴如醉的地步。

 开始今天的lxn/walk练习:

package main  import ( 	"encoding/json" 	"github.com/lxn/walk" 	. "github.com/lxn/walk/declarative" )  func main() { 	var inTE, outTE *walk.TextEdit 	MainWindow{ 		Title:   "格式化工具", 		MinSize: Size{600, 400}, 		Layout:  VBox{}, 		Children: []Widget{ 			HSplitter{ 				Children: []Widget{ 					TextEdit{AssignTo: &inTE}, 					TextEdit{AssignTo: &outTE, ReadOnly: true}, 				}, 			}, 			PushButton{ 				Text: "格式化", 				MinSize:Size{150, 36}, 				OnClicked: func() { 					var jsonStr interface{} 					err := json.Unmarshal([]byte(inTE.Text()), &jsonStr) 					jsonStr, _ = json.MarshalIndent(jsonStr, "\r\n", "\t") 					if err != nil {                         // 暂时未找到设置颜色值 						//outTE.SetTextColor(walk.Color(32)) 						outTE.SetText("数据格式不正确") 					} else { 						outTE.SetText(string(jsonStr.([]uint8))) 					} 				}, 			}, 		}, 	}.Run() }

 

 

本案例尽在Windows 10 上测试。

运行首先使用rsrc工具编译加载manifest文件,然后build生成可执行文件

 

 

======================小优化======================

  1. 添加格式化的字符
  2. 控件的优化
package main  import ( 	"encoding/json" 	"github.com/lxn/walk" 	. "github.com/lxn/walk/declarative" ) func main() { 	var inTE, outTE *walk.TextEdit 	var RadioTypeTab,RadioTypeSpace *walk.RadioButton  	MainWindow{ 		Title:   "格式化工具", 		MinSize: Size{600, 400}, 		Layout:  VBox{}, 		Children: []Widget{ 			HSplitter{ 				MinSize: Size{600, 300}, 				Children: []Widget{ 					TextEdit{AssignTo: &inTE, HScroll:true, VScroll:true}, 					TextEdit{AssignTo: &outTE, ReadOnly: true, HScroll:true, VScroll:true}, 				}, 			}, 			Composite{ 				MinSize: Size{600, 50}, 				Layout:  Grid{Columns: 6, Spacing: 10}, 				Children: []Widget{ 					HSplitter{ 						Children: []Widget{ 							RadioButtonGroup{ 								Buttons: []RadioButton{ 									RadioButton{Name: "SplitType", Text: "Tab", Value: "Tab", RowSpan: 3, ToolTipText: "这是默认选项",AssignTo:&RadioTypeTab}, 									RadioButton{Name: "SplitType", Text: "空格", Value: "space", ToolTipText: "4个空格",AssignTo:&RadioTypeSpace}}}, 						}, 					}, 				}, 			}, 			PushButton{ 				Text:    "格式化", 				MinSize: Size{150, 36}, 				OnClicked: func() { 					typeStr := "    " 					checked := RadioTypeTab.Checked() 					if checked { 						typeStr = "\t" 					}  					var TextColor walk.Color 					if inTE.Text() == "" { 						TextColor = walk.RGB(byte(255), byte(48), byte(48)) 						outTE.SetTextColor(TextColor) 						outTE.SetText("数据为空") 						return 					} 					var jsonStr interface{} 					err := json.Unmarshal([]byte(inTE.Text()), &jsonStr) 					jsonStr, _ = json.MarshalIndent(jsonStr, "\r\n", typeStr) 					if err != nil { 						TextColor = walk.RGB(byte(255), byte(48), byte(48)) 						outTE.SetTextColor(TextColor) 						outTE.SetText("数据格式不正确") 						return 					} 					TextColor = walk.RGB(byte(34), byte(139), byte(34)) 					//outTE.SetTextSelection(1, 10) 					outTE.SetTextColor(TextColor) 					outTE.SetText(string(jsonStr.([]uint8))) 				}, 			}, 		}, 	}.Run() } 

 

运行的最终效果图:

 

 

由于是练习GUI的使用方式,并未在代码阅读性和性能方面做功夫,

比如: 应该将处理数据的逻辑代码独立出来, 与gui代码逻辑分离

更多建议贵请留言 ^_^

本文发表于2018年01月09日 16:33
(c)注:本文转载自https://my.oschina.net/90design/blog/1604349,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1734 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1