PPA

导航

sciter笔记

sciter是用C++实现的一个老牌的、快速小巧的、跨平台的gui方案。界面采用HTML + CSS + script方式实现。除了C++外,还支持多种语言绑定。

 

go-sciter:当前版本跑基本示例代码报错,搜索到的解决方案为在mod文件中手工指定最新的fix提交版本。

rust-sciter:当前版本可以跑通示例代码,且rust语言写一些小工具啥的非常棒。奈何rust语言内容比go复杂太多,静不下心来学习。

scitersharp:C#绑定,支持与winform,wpf等集成。但我在跑示例程序时碰到一些异常不知道咋解决。

 

下面的笔记都是以go-sciter为例来写的。

1、sciter不支持H2的charset设置,即

<meta charset="utf-8">    // 这种不行
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>    // 需要写这种H4的方式

2、占满整个窗口:经测试,设置width和height为100%不起作用。sciter的做法是设置size参数为 " * "

body {
      margin: 0;
      background-color: lightblue;
      size: *;    // body会占满整个窗口
    }

 3、sciter用flow配合size来实现flex box效果。

nav {
      background-color: lightblue;
      flow: horizontal;   // 内部元素会横向分布,从左到右
      width: *;   // 占满整个宽度
height: *; // 占满整个高度 }

特别是配合grid()时,可以非常方便的布局

section {
        size:*; 
        flow:grid(1 1 1,       //实现有header,footer ,双侧边栏,主内容区的布局方式
                  2 5 3,
                  4 4 4);
      }

 4、资源文件打包

sciter界面是由html、css、tis脚本等描述的。当用户程序发布时,必须同时携带这些资源文件。而go语言编写的程序一般是单个可执行文件分发的。可以通过下面的方式,将资源文件打包进可执行文件中。

import (
    "fmt"

    rice "github.com/GeertJohan/go.rice"

    "github.com/fatih/color"
    "github.com/sciter-sdk/go-sciter"
    sciter_rice "github.com/sciter-sdk/go-sciter/rice"
    "github.com/sciter-sdk/go-sciter/window"
)

func main() {
    // 打包静态资源
    rice.MustFindBox("ui")  // 假设资源文件都在项目根目录下的ui文件夹中

    rect := sciter.NewRect(100, 100, 600, 480)
    w, err := window.New(sciter.DefaultWindowCreateFlag, rect)
    if err != nil {
        color.RedString("Failed to generate sciter window ", err.Error())
    }

    sciter_rice.HandleDataLoad(w.Sciter)  // 窗口初始化后,调用go-sciter的rice封装

    err = w.LoadFile("rice://ui/main.html")    // 通过rice加载需要的资源
    if err != nil {
        color.RedString("Failed to load ui file ", err.Error())
    }

    w.SetTitle("Simple rice")
    w.Show()
    w.Run()
}

// 1、
先 go get github.com/GeertJohan/go.rice/rice 安装rice命令

// 2、在go程序文件所在的目录执行: rice embed 命令即可生成名为rice-box.go的资源文件。
// 3、之后再执行 go build编译出的可执行文件将携带所需的资源文件。

 5、编译出来的exe还需要sciter.dll等动态库才能正确运行,动态链接库不容易打包到可执行文件中。可以采取打包到一个压缩包的形式来发布绿色版,Window下也可以做成安装程序或者做成自解压rar程序。

 

  

posted on 2020-12-31 16:41  PPA  阅读(1105)  评论(0编辑  收藏  举报