Go语言使用go-sciter创建桌面应用(一) 简单的通过html,css写ui

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

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

一、环境准备

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

	1. 解压,找到 sciter-sdk\bin\64\sciter.dll 复制到 C:\Windows\System32 或 编译二进制文件的同级目录

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

第二步:由于使用到 cgo,所以 Windows 下需要安装 Mingw-w64

	1. 	MinGW 	下载地址:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/

把下载后的 Mingw-w64\bin 目录加入到环境变量中

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

	1.	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文件编码格式转成转成UTF-8+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>

在这里插入图片描述

关于一些问题的说明:
w.LoadFile() 无法加载相对路径的文件,请确保你运行程序的目录是否正确。
比如新版本的GoLand,在你右键Run时,程序所指向的目录是你 New Project 时设置 Location 的目录,而不是此时 go脚本 所在的目录。

在这里插入图片描述

	如 html 无法正确加载可使用 go-bindata 打包为二进制数据直接引用
	
	1. 安装Go-bindata
	2. go get -u github.com/jteeuwen/go-bindata/
	3. 把 go-bindata.exe 加入环境变量
	4. cmd 进入 src 目录 输入以下命令 go-bindata -o demo/bindata.go -pkg main demo/
	
	-o 输出文件到 demo/bindata.go 包名 -pkg demo 然后是需要打包的目录 main/ 三个点包括所有子目录
	这样就可以把所有相关文件打包到 bindata.go 而且开头是 package main 保持和目录一致。
	
	使用方法:
	把 w.LoadFile("demo1.html") 改为
	bytes, _ := Asset("demo/demo1.html") 
	w.LoadHtml(string(bytes), "")

猜你喜欢

转载自blog.csdn.net/Regulations/article/details/105653999