我们使用go-sciter,就不得不提Sciter,Sciter 是一个嵌入式的 HTML/CSS/脚本引擎,旨在为桌面应用创建一个 UI 框架层。

说简单点就是我们通过它可以像写html,css那样写桌面UI。

一、环境准备

第一步:从https://sciter.com/download/地址下载sciter-sdk

解压,找到sciter-sdk\bin\64\sciter.dll复制到c:\windows\system32

注意上面的请根据你自已的系统选择相应文件

第二步:由于使用到cgo,所以window下需要安装mingw或tdm-gcc(建议安装tdm-gcc)
下载地址:

https://sourceforge.net/projects/mingw/files/

下载地址:

http://tdm-gcc.tdragon.net/download

下载:mingw-get-setup.exe或tdm64-gcc-5.1.0-2.exe
安装,然后把mingw\bin或tdm-gcc\bin加入到环境变量中

第三步:cmd进入gopath目录并运行

go get -x github.com/sciter-sdk/go-sciter

  

二、通过html,css编写简单UI

demo1.go代码如下:

package main

import (
"github.com/sciter-sdk/go-sciter"
"github.com/sciter-sdk/go-sciter/window"
"log"
) func main() {
//创建window窗口
//参数一表示创建窗口的样式
//SW_TITLEBAR 顶层窗口,有标题栏
//SW_RESIZEABLE 可调整大小
//SW_CONTROLS 有最小/最大按钮
//SW_MAIN 应用程序主窗口,关闭后其他所有窗口也会关闭
//SW_ENABLE_DEBUG 可以调试
//参数二表示创建窗口的矩形
w, err := window.New(sciter.SW_TITLEBAR|
sciter.SW_RESIZEABLE|
sciter.SW_CONTROLS|
sciter.SW_MAIN|
sciter.SW_ENABLE_DEBUG,
nil);
if err != nil {
log.Fatal(err);
}
//加载文件
w.LoadFile("demo1.html");
//设置标题
w.SetTitle("你好,世界");
//显示窗口
w.Show();
//运行窗口,进入消息循环
w.Run();
}

demo1.html代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
</head>
<body>
你好,世界
</body>
</html>

如果出现乱码请把demo1.html文件转成gb2312并加上<meta charset="gb2312">或者转成UTF-8+BOM(注意是加BOM,加BOM,加BOM)。

三、写个表单的UI

demo2.go代码如下:

package main

import (
"github.com/sciter-sdk/go-sciter"
"github.com/sciter-sdk/go-sciter/window"
"log"
) func main() {
//创建window窗口
//参数一表示创建窗口的样式
//SW_TITLEBAR 顶层窗口,有标题栏
//SW_RESIZEABLE 可调整大小
//SW_CONTROLS 有最小/最大按钮
//SW_MAIN 应用程序主窗口,关闭后其他所有窗口也会关闭
//SW_ENABLE_DEBUG 可以调试
//参数二表示创建窗口的矩形
w, err := window.New(sciter.SW_TITLEBAR|
sciter.SW_RESIZEABLE|
sciter.SW_CONTROLS|
sciter.SW_MAIN|
sciter.SW_ENABLE_DEBUG,
//给窗口设置个大小
&sciter.Rect{Left: 0, Top: 0, Right: 500, Bottom: 500});
if err != nil {
log.Fatal(err);
}
//加载文件
w.LoadFile("demo2.html");
//设置标题
w.SetTitle("表单");
//显示窗口
w.Show();
//运行窗口,进入消息循环
w.Run();
}

demo2.html代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表单</title>
<style>
table {
width: 100%;
border-collapse: collapse;
} table td {
padding: 10px;
border: 1px solid #ccc;
} table td:first-child {
white-space:nowrap;
}
</style>
</head>
<body>
<form action="">
<table>
<tr>
<td>用户:</td>
<td><input type="text"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password"></td>
</tr>
<tr>
<td>性别:</td>
<td>
<input type="radio" value="0">男
<input type="radio" value="1">女
</td>
</tr>
<tr>
<td>爱好:</td>
<td>
<input type="checkbox" value="">看书
<input type="checkbox" value="">打球
<input type="checkbox" value="">旅游
</td>
</tr>
<tr>
<td>简介:</td>
<td>
<textarea name="" id="" cols="30" rows="10"></textarea>
</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>

是不是感觉很方便,我个人觉得未来这种方式写UI会成为主流,传统的过于繁琐和麻烦了。

关于一些问题的说明:

1、w.LoadFile() 无法加载相对路径的文件,请确保你运行程序的目录是否正确。

比如新版本的GoLand,在你右键Run时,程序所指向的目录是你New Project时设置Location的目录,而不是此时go脚本所在的目录。

go语言使用go-sciter创建桌面应用(一) 简单的通过html,css写ui的更多相关文章

  1. Ubuntu创建桌面快捷方式

    默认情况下,ubuntu会将自动安装的软件快捷方式保存在/usr/share/applications目录下,如果我们要创建桌面快捷方式,只需要右键-复制-桌面 就Ok,如图: 上面的方法是通过系统自 ...

  2. Windows中创建桌面快捷方式

    Windows中创建桌面快捷方式 -------------- -------------- -------------- --------------

  3. robot创建桌面图标(转载)

    桌面ride图标,安装之后会自动创建(偶尔也会创建失败),创建桌面图标方法如下: 1. 新建快捷方式 在桌面右击鼠标,弹出的菜单选择 新建-快捷方式 ,然后在"请键入对象"的位置输 ...

  4. Qt之创建桌面和开始菜单快捷方式

    将安装好的酷狗拷贝到C:\data目录中 1.创建桌面快捷方式 QFile::link("C:/data/KuGou.exe", QStandardPaths::writableL ...

  5. Swift3.0语言教程使用编码创建和初始化字符串

    Swift3.0语言教程使用编码创建和初始化字符串 使用编码创建和初始化字符串 创建和初始化字符串除了可以使用上文中提到的方法外,还可以使用init(coder:)方法,此方法一般不常使用,其语法形式 ...

  6. Swift3.0语言教程使用指针创建和初始化字符串

    Swift3.0语言教程使用指针创建和初始化字符串 Swift3.0语言教程使用指针创建和初始化字符串苹果的Swift团队花了不少功夫来支持C的一些基础特性.C语言中为我们提供了指针,Swift也不例 ...

  7. Swift3.0语言教程使用字符串创建和初始化字符串

    Swift3.0语言教程使用字符串创建和初始化字符串 Swift3.0语言教程使用字符串创建和初始化字符串,在编程语言中,字面值是很常见的数据描述形式.人们可以通过字面所表达的意思,获知其含义,尤其是 ...

  8. WPF 创建桌面快捷方式

    #region 创建桌面快捷方式 string deskTop = System.Environment.GetFolderPath(System.Environment.SpecialFolder. ...

  9. Android创建桌面快捷图标

    <!-- 添加快捷方式 --> <uses-permission android:name="com.android.launcher.permission.INSTALL ...

随机推荐

  1. linux shell实现 URL 编码/解码方法

    (1)编码的两种方法 # echo '手机' | tr -d '\n' | xxd -plain | sed 's/\(..\)/%\1/g' # echo '手机' |tr -d '\n' |od ...

  2. 在前台页面写java代码,导入java的包

  3. ArcGIS案例学习笔记-点集中最近点对和最远点对

    ArcGIS案例学习笔记-点集中最近点对和最远点对 联系方式:谢老师,135-4855-4328,xiexiaokui@qq.com 目的:对于点图层,查找最近的点对和最远的点对 数据: 方法: 1. ...

  4. oracle理解和导入导出

    搞过sql server的程序员很难理解oracle的表空间.我在这里简单说一下吧, oracle中的表空间就相当于sql server中的实例,用户就相当于sql server中的库. 所以在ora ...

  5. 文字在线转图片二维码的公用API接口

    在线生成网址二维码的API接口: 1.百度网盘(可使用https)       http://pan.baidu.com/share/qrcode?w=150&h=150&url=ht ...

  6. Using Service Workers

    [Using Service Workers] 1.This is an experimental technology Because this technology's specification ...

  7. create-react-app之proxy

    [create-react-app之proxy] create-react-app可以用于一键创建web_client环境,默认使用webpack-dev-server.但在开发过程中,往往需要cli ...

  8. js 中的原型链与继承

    ECMAScript中将原型链作为实现继承的主要方法,其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 1.原型链 先回忆一下构造函数和原型以及实例的关系:每个构造函数都有一个原型对 ...

  9. python 内置函数(二) 进阶函数 递归内容及二分法查找 知识点

    1,lambda:  匿名函数 2.sorgted()  排序函数 3,filter()   过滤函数 筛选 4,map()  映射函数 5.递归 6.二分法 一. 匿名函数: lambda lamb ...

  10. scrapy 琐碎的东西

    1.深度指定 DEPTH_LIMIT=1 2.常用命令 scrapy startproject name scrapy genspider name name.com scrapy crawl nam ...