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 ...
随机推荐
- shell定时任务crontab
cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details ...
- app与jvm 反向代理时config的设置(用于在web页面显示npm(就如tomcat)产生的页面)
dev: { // Various Dev Server settings contentBase: ROOT, host: ip, port: 8084, //此端口为任意设置,不重复即可,为 ...
- 函数putText()在图片上写文字
#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace c ...
- 用python来分割图片
程序思路: 此次程序主要是利用PIL(Python Image Libraty)这库,来进行图片的处理.PIL是一个功能非常强大的python图像处理标准库,但由于PIL只支持python2.7.如今 ...
- U3D组件------CharacterController(角色控制器)
角色控制器中有碰撞体和刚体的属性 Slope Limit:角色能爬的斜坡的坡度限制 Step Offset:角色走台阶的高度 Skin Width:当场景里面出现多个角色控制器的时候,两个对象在接触的 ...
- PLM修改数据库密码
在WINDCHILL SHELL中执行以下命令: xconfmanager -s wt.pom.dbPassword=数据库密码 -t db/db.properties -p 重启服务
- js中的arguments对象
在Javascript中没有函数重载,而arguments对象弥补了这点不足. js函数的参数是一个数组,在参数个数不固定的情况下,只需要给方法传递不同元素个数的数组即可.即使声明函数时没有形式参数, ...
- modal template
<div class="modal fade" id="tmp_order_modal" tabindex="-1" role=&qu ...
- oracle 11g SQL语句补充学习
添加列: alter table tablename add columnName datatype (not null); -------需要注意一点的是在添加一列为非空的时候, 表必 ...
- C library:<cctype>(ctype.h)
1, isalnum(): check whether c is either a decimal digit or an uppercase or lowercase letter. 2, isal ...