go语言使用go-sciter创建桌面应用(一) 简单的通过html,css写ui
我们使用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的更多相关文章
- Ubuntu创建桌面快捷方式
默认情况下,ubuntu会将自动安装的软件快捷方式保存在/usr/share/applications目录下,如果我们要创建桌面快捷方式,只需要右键-复制-桌面 就Ok,如图: 上面的方法是通过系统自 ...
- Windows中创建桌面快捷方式
Windows中创建桌面快捷方式 -------------- -------------- -------------- --------------
- robot创建桌面图标(转载)
桌面ride图标,安装之后会自动创建(偶尔也会创建失败),创建桌面图标方法如下: 1. 新建快捷方式 在桌面右击鼠标,弹出的菜单选择 新建-快捷方式 ,然后在"请键入对象"的位置输 ...
- Qt之创建桌面和开始菜单快捷方式
将安装好的酷狗拷贝到C:\data目录中 1.创建桌面快捷方式 QFile::link("C:/data/KuGou.exe", QStandardPaths::writableL ...
- Swift3.0语言教程使用编码创建和初始化字符串
Swift3.0语言教程使用编码创建和初始化字符串 使用编码创建和初始化字符串 创建和初始化字符串除了可以使用上文中提到的方法外,还可以使用init(coder:)方法,此方法一般不常使用,其语法形式 ...
- Swift3.0语言教程使用指针创建和初始化字符串
Swift3.0语言教程使用指针创建和初始化字符串 Swift3.0语言教程使用指针创建和初始化字符串苹果的Swift团队花了不少功夫来支持C的一些基础特性.C语言中为我们提供了指针,Swift也不例 ...
- Swift3.0语言教程使用字符串创建和初始化字符串
Swift3.0语言教程使用字符串创建和初始化字符串 Swift3.0语言教程使用字符串创建和初始化字符串,在编程语言中,字面值是很常见的数据描述形式.人们可以通过字面所表达的意思,获知其含义,尤其是 ...
- WPF 创建桌面快捷方式
#region 创建桌面快捷方式 string deskTop = System.Environment.GetFolderPath(System.Environment.SpecialFolder. ...
- Android创建桌面快捷图标
<!-- 添加快捷方式 --> <uses-permission android:name="com.android.launcher.permission.INSTALL ...
随机推荐
- Nginx反向代理时tomcat日志获取真实IP
对于nginx+tomcat这种架构,如果后端tomcat配置保持默认,那么tomcat的访问日志里,记录的就是前端nginx的IP地址,而不是真实的访问IP.因此,需要对nginx.tomcat做如 ...
- ADO.NET基础知识
ADO.NET定义 ADO是ActiveX Data Objects的缩写,ADO.NET是数据库应用程序和数据源之间沟通的桥梁,主要提供一个面向对象的数据访问架构,用来开发数据库应用程序,就是一组类 ...
- [PC]PHPCMS二次开发指南(上)
------------------------------------------------------------------------------------- PHPCMS本身功能已经很完 ...
- springboot 整合redis redis工具类
一步 : pom中引入相关依赖 <!-- 引入 redis 依赖 --> <dependency> <groupId>org.springframework.boo ...
- 吴裕雄 oracle PL/SQL编程
- ELK日志平台
1.ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch.Logstash和Kibana三个开源工具组成,不过现在还新增了一个Beats,它是一个轻量级的日志收集处理工具(Age ...
- shell脚本中比较两个小数的办法
具体情况#man bc 然而对小数进行比较的相关方法有几个: 1. 自己的解决方法,判断小数点后最多有几位数(N),然后对将要比较的两个数值进行 乘与10的N次方 也就是将小数点去掉来进行比较(小数点 ...
- 解题4(NumberToEnglish )
题目描述 Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文: 如22:twenty two,123:one hundred and twenty three. 说明: 数字为正整数, ...
- python 取当前日期
import time time.strftime('%Y-%m-%d',time.localtime(time.time()))
- TCP的状态转移
状态转移图 状态分析 客户端 CLOSED 初始状态 调用connect将发起主动打开,发送SYN J到服务端,进入SYN_SENT状态. SYN_SENT 客户端已经发送SYN报文 接收到服务端发回 ...