func main() { var mw *walk.MainWindow var windowIcon *walk.Icon counter := 0 if _, err := (MainWindow{ AssignTo: &mw, Title: "Walk Image Icon Example", Layout: HBox{}, Children: []Widget{ HSpacer{}, PushButton{ Text: "Push me", OnClicked: func() { ic, err := walk.NewIconFromImage(makeDigitImage(counter)) if err != nil { return } counter++ mw.SetIcon(ic) if windowIcon != nil { windowIcon.Dispose() } windowIcon = ic }, }, HSpacer{}, }, }.Run()); err != nil { log.Fatal(err) } }
// Main entry and GUI construction func main() { LANG = queryRegLayoutId(LANG_ID) var ( mw *walk.MainWindow currentLayout = getKeyboardLayout() // Get current system layout. layoutPresent = checkLanguage() // Check if installed language is present and can be loaded. triggered = true infoText string ldtMain *walk.LineEdit btnMain *walk.PushButton ) if layoutPresent { infoText = INFO_TEXT } else { infoText = "The layout does not seem to be present on your system. Please install it first." } MainWindow{ AssignTo: &mw, Title: "kasahorow " + LANG_STRING + " Writer", MaxSize: Size{600, 200}, MinSize: Size{600, 200}, Layout: VBox{}, Children: []Widget{ MultilineLabel{Text: infoText}, LineEdit{AssignTo: &ldtMain}, PushButton{ AssignTo: &btnMain, Enabled: layoutPresent, Text: "Switch back to default layout.", OnClicked: func() { if triggered { triggered = false activateKeyboardLayout(currentLayout, KFL_SETFORPROCESS) btnMain.SetText("Switch to " + LANG_STRING + ".") } else { triggered = true loadLanguage() btnMain.SetText("Switch back to default layout.") } }, }, }, }.Create() if layoutPresent { mw.Synchronize(loadLanguage) // Load new layout in main GUI thread. } ic, _ := walk.NewIconFromResource("kasahorow") mw.SetIcon(ic) mw.Run() }
func Run() { var mw *walk.MainWindow var db *walk.DataBinder var ep walk.ErrorPresenter var spiderMenu = NewSpiderMenu(spider.Menu) if err := (MainWindow{ AssignTo: &mw, DataBinder: DataBinder{ AssignTo: &db, DataSource: Input, ErrorPresenter: ErrorPresenterRef{&ep}, }, Title: config.APP_NAME, MinSize: Size{1100, 700}, Layout: VBox{}, Children: []Widget{ // 任务列表 HSplitter{ Children: []Widget{ TableView{ MinSize: Size{550, 400}, AlternatingRowBGColor: walk.RGB(255, 255, 224), CheckBoxes: true, ColumnsOrderable: true, Columns: []TableViewColumn{ {Title: "#", Width: 45}, {Title: "任务", Width: 110 /*, Format: "%.2f", Alignment: AlignFar*/}, {Title: "描述", Width: 370}, }, Model: spiderMenu, }, // 关键词 VSplitter{ MinSize: Size{550, 400}, Children: []Widget{ VSplitter{ Children: []Widget{ Label{ Text: "关键词:(多任务之间以 | 隔开,选填)", }, LineEdit{ Text: Bind("Keywords"), }, }, }, VSplitter{ Children: []Widget{ Label{ Text: "采集页数:(选填)", }, NumberEdit{ Value: Bind("MaxPage"), Suffix: "", Decimals: 0, }, }, }, VSplitter{ Children: []Widget{ Label{ Text: "*并发协程:(1~99999)", }, NumberEdit{ Value: Bind("ThreadNum", Range{1, 99999}), Suffix: "", Decimals: 0, }, }, }, VSplitter{ Children: []Widget{ Label{ Text: "*分批输出大小:(1~5,000,000 条数据)", }, NumberEdit{ Value: Bind("DockerCap", Range{1, 5000000}), Suffix: "", Decimals: 0, }, }, }, VSplitter{ Children: []Widget{ Label{ Text: "*间隔基准:", }, ComboBox{ Value: Bind("BaseSleeptime", SelRequired{}), BindingMember: "Uint", DisplayMember: "Key", Model: GUIOpt.SleepTime, }, }, }, VSplitter{ Children: []Widget{ Label{ Text: "*随机延迟:", }, ComboBox{ Value: Bind("RandomSleepPeriod", SelRequired{}), BindingMember: "Uint", DisplayMember: "Key", Model: GUIOpt.SleepTime, }, }, }, RadioButtonGroupBox{ ColumnSpan: 2, Title: "*输出方式", Layout: HBox{}, DataMember: "OutType", Buttons: []RadioButton{ {Text: GUIOpt.OutType[0].Key, Value: GUIOpt.OutType[0].String}, {Text: GUIOpt.OutType[1].Key, Value: GUIOpt.OutType[1].String}, {Text: GUIOpt.OutType[2].Key, Value: GUIOpt.OutType[2].String}, }, }, }, }, }, }, Composite{ Layout: HBox{}, Children: []Widget{ // 必填项错误检查 LineErrorPresenter{ AssignTo: &ep, ColumnSpan: 2, }, PushButton{ Text: "开始抓取", AssignTo: &toggleSpecialModePB, OnClicked: func() { if toggleSpecialModePB.Text() == "取消" { toggleSpecialModePB.SetEnabled(false) toggleSpecialModePB.SetText("取消中…") Stop() } else { if err := db.Submit(); err != nil { log.Print(err) return } Input.Spiders = spiderMenu.GetChecked() if len(Input.Spiders) == 0 { return } toggleSpecialModePB.SetText("取消") Start() } }, }, }, }, }, }.Create()); err != nil { log.Fatal(err) } // 绑定log输出界面 lv, err := NewLogView(mw) if err != nil { log.Fatal(err) } log.SetOutput(lv) if icon, err := walk.NewIconFromResource("ICON"); err == nil { mw.SetIcon(icon) } // 运行窗体程序 mw.Run() }
func main() { fout, _ := os.Create("dialer.log") defer fout.Close() bo := bufio.NewWriter(fout) defer bo.Flush() util.INFO.SetOutput(bo) util.ERROR.SetOutput(bo) bin, err := ioutil.ReadFile("config.json") if err == nil { json.Unmarshal(bin, config) } else { util.ERROR.Log(err) err = nil } var usr, pwd *walk.LineEdit var raddr, rusr, rpwd *walk.LineEdit var lb, rb *walk.PushButton var mode *walk.ComboBox var mw *walk.MainWindow var db *walk.DataBinder var laddr, lusr, lpwd *walk.Splitter go func() { for mw == nil { runtime.Gosched() } ic, err := walk.NewIconFromResourceId(6) if err == nil { // func onLoad() { db.SetAutoSubmit(true) mw.SetIcon(ic) switch config.RouterType { case "hiwifi": laddr.SetVisible(true) lusr.SetVisible(false) lpwd.SetVisible(true) case "openwrt": laddr.SetVisible(true) lusr.SetVisible(true) lpwd.SetVisible(true) case "asus": laddr.SetVisible(true) lusr.SetVisible(true) lpwd.SetVisible(true) default: laddr.SetVisible(false) lusr.SetVisible(false) lpwd.SetVisible(false) } mw.SetSize(walk.Size{0, 0}) // } } }() MainWindow{ AssignTo: &mw, Title: TITLE, MinSize: Size{340, 0}, Layout: VBox{}, DataBinder: DataBinder{ AssignTo: &db, DataSource: config, }, Children: []Widget{ HSplitter{ Children: []Widget{ Label{Text: "用户名", MaxSize: Size{60, 20}}, LineEdit{Text: Bind("Username"), AssignTo: &usr, MaxSize: Size{0, 20}}, }, MaxSize: Size{0, 20}, }, HSplitter{ Children: []Widget{ Label{Text: "密码", MaxSize: Size{60, 20}}, LineEdit{Text: Bind("Password"), AssignTo: &pwd, MaxSize: Size{0, 20}, PasswordMode: true, OnMouseDown: func(x, y int, button walk.MouseButton) { pwd.SetPasswordMode(false) }, OnMouseUp: func(x, y int, button walk.MouseButton) { pwd.SetPasswordMode(true) }, }, }, MaxSize: Size{0, 20}, }, HSplitter{ Children: []Widget{ Label{Text: "模式", MaxSize: Size{60, 20}}, ComboBox{AssignTo: &mode, Editable: true, Value: Bind("RouterType"), Model: []string{"local", "10.0.x.x(手动填写)", "openwrt", "hiwifi", "asus"}, MaxSize: Size{0, 20}, OnCurrentIndexChanged: func() { switch mode.CurrentIndex() { case 2: //"openwrt": laddr.SetVisible(true) lusr.SetVisible(true) lpwd.SetVisible(true) case 3: //"hiwifi": config.RouterAddr = "192.168.199.1" laddr.SetVisible(true) lusr.SetVisible(false) lpwd.SetVisible(true) case 4: //"asus": laddr.SetVisible(true) lusr.SetVisible(true) lpwd.SetVisible(true) default: laddr.SetVisible(false) lusr.SetVisible(false) lpwd.SetVisible(false) } mw.SetSize(walk.Size{0, 0}) }, }, }, MaxSize: Size{0, 20}, }, HSplitter{ AssignTo: &laddr, Children: []Widget{ Label{Text: "路由地址", MaxSize: Size{60, 20}}, LineEdit{Text: Bind("RouterAddr"), AssignTo: &raddr, MaxSize: Size{0, 20}}, }, MaxSize: Size{0, 20}, }, HSplitter{ AssignTo: &lusr, Children: []Widget{ Label{Text: "路由用户名", MaxSize: Size{60, 20}}, LineEdit{Text: Bind("RouterUser"), AssignTo: &rusr, MaxSize: Size{0, 20}}, }, MaxSize: Size{0, 20}, }, HSplitter{ AssignTo: &lpwd, Children: []Widget{ Label{Text: "路由密码", MaxSize: Size{60, 20}}, LineEdit{Text: Bind("RouterPwd"), AssignTo: &rpwd, MaxSize: Size{0, 20}, PasswordMode: true, OnMouseDown: func(x, y int, button walk.MouseButton) { rpwd.SetPasswordMode(false) }, OnMouseUp: func(x, y int, button walk.MouseButton) { rpwd.SetPasswordMode(true) }, }, }, MaxSize: Size{0, 20}, }, HSplitter{ Children: []Widget{ PushButton{ AssignTo: &lb, Text: "开始连接", OnClicked: func() { if mode.Text() == "10.0.x.x(手动填写)" { walk.MsgBox(mw, "请填写IP", "手动填写需要自己获取IP 你可在路由器中自己查找 本地拨号请用local", walk.MsgBoxOK) return } lb.SetText("连接中...") lb.SetEnabled(false) rb.SetEnabled(false) go func() { d := netdialer.NewDialer(usr.Text(), pwd.Text()) d.UserIP = selectMode(mode.Text()) if d.UserIP == "" { walk.MsgBox(mw, "连接失败", "请检查设置", walk.MsgBoxOK) d = nil return } d.ConnectDirect() mw.SetTitle(TITLE + " [" + d.UserIP + "]") d = nil lb.SetEnabled(true) rb.SetEnabled(true) lb.SetText("开始连接") if err == nil { walk.MsgBox(mw, "连接成功", "感谢使用", walk.MsgBoxOK) util.INFO.Log("连接成功: 感谢使用") } else { walk.MsgBox(mw, "连接失败", err.Error(), walk.MsgBoxOK) util.INFO.Log("连接失败: ", err.Error()) } }() }, }, PushButton{ AssignTo: &rb, Text: "断开连接", OnClicked: func() { if mode.Text() == "10.0.x.x(手动填写)" { walk.MsgBox(mw, "请填写IP", "手动填写需要自己获取IP 你可在路由器中自己查找", walk.MsgBoxOK) return } rb.SetText("断开中...") lb.SetEnabled(false) rb.SetEnabled(false) go func() { d := netdialer.NewDialer(usr.Text(), pwd.Text()) d.UserIP = selectMode(mode.Text()) if d.UserIP == "" { walk.MsgBox(mw, "连接失败", "请检查设置", walk.MsgBoxOK) util.INFO.Log("连接失败: 请检查设置") d = nil return } err := d.DisconnectDirect() mw.SetTitle(TITLE + " [" + d.UserIP + "]") d = nil lb.SetEnabled(true) rb.SetEnabled(true) rb.SetText("断开连接") if err == nil { walk.MsgBox(mw, "断开成功", "感谢使用", walk.MsgBoxOK) util.INFO.Log("断开成功: 感谢使用") } else { walk.MsgBox(mw, "断开失败", err.Error(), walk.MsgBoxOK) util.INFO.Log("断开失败: ", err.Error()) } }() }, }, }, MaxSize: Size{0, 20}, }, }, }.Run() saveConfig(config) bo.Flush() }
func main() { var le, le2 *walk.LineEdit var lb1, lb2 *walk.Label var ck1 *walk.CheckBox var mw *walk.MainWindow copytext, _ := walk.Clipboard().Text() updateIcon := func() { mainIcon, err := walk.NewIconFromResource("101") if err != nil { // do some work } mw.SetIcon(mainIcon) } if err := (MainWindow{ AssignTo: &mw, Title: "模板下载器", MinSize: Size{400, 100}, Layout: VBox{}, Children: []Widget{ CheckBox{ AssignTo: &ck1, Name: "cksnap", Text: "带截图抓取", Checked: false, }, Label{ AssignTo: &lb1, Text: "网址", }, LineEdit{ AssignTo: &le, Text: copytext, }, Label{ AssignTo: &lb2, Text: "保存目录", }, LineEdit{ AssignTo: &le2, Text: `D:\APMServ5.2.6\www\htdocs\down\tpls\`, }, PushButton{ Text: "开始抓取", OnClicked: func() { fmt.Println(ck1.Checked()) if ck1.Checked() { command := flag.String("cmd", "phantomjs", "Set the command.") patharr := strings.Split(le2.Text(), "\\") args := flag.String("args", "rasterize.js "+le.Text()+" "+le2.Text()+"\\"+patharr[len(patharr)-1]+".png", "Set the args. (separated by spaces)") var argArray []string if *args != "" { argArray = strings.Split(*args, " ") } else { argArray = make([]string, 0) } flag.Parse() cmd := exec.Command(*command, argArray...) buf, err := cmd.Output() if err != nil { fmt.Fprintf(os.Stderr, "The command failed to perform: %s (Command: %s, Arguments: %s)", err, *command, *args) return } fmt.Fprintf(os.Stdout, "Result: %s", buf) } getTemplate(le.Text(), le2.Text()) }, },