rust语言orbtk GUI基础(old2018)-1.orbtk入门

2023-05-16

orbtk的api在2019.2进行了修改,该文章为2018版
新版请转[新版orbtk gui基础]

rust语言GUI库简述

rust目前已经有非常多的GUI方案,大多数是绑定的其他语言编写的库,如gtk绑定,qt绑定等等。

如果想看有哪些GUI库可以参考:

  • https://github.com/rust-unofficial/awesome-rust
  • https://crates.io/crates/gui

个人比较推荐2个:

  1. rust qt绑定:qt功能强大,跨平台,足以满足各种需求
  2. orbtk:rust语言编写的操作系统redox项目的GUI方案,完全使用rust实现,跨平台

orbtk简介

orbtk是redox(rust语言操作系统)项目组开发的,redox的gui用的就是orbtk。orbtk是跨平台的gui,不仅支持Redox OS,还支持Linux, macOS, Windows系统。

orbtk的特点:

  • 类似Flutter, React, Redux的API
  • 使用DECS库(Entity Component System library DCES)操作控件(widget)和属性(properties)
  • 更新而不是重建(rebuild)控件树
  • 弹性的事件系统
  • 控件状态管理
  • CSS 主题,可以使用css修改控件样式

orbtk基于SDL2,所以依赖SDL2库。

orbtk的开发受到了Flutter、React、Yew等的启发,所以API与这些库有些类似。目前(2018)orbtk还有很多功能不完善,正在开发中,根据官网,orbtk未来计划如下:

  • 编写书籍
  • 样式指南(还没弄清楚是个功能还是出书)
  • 更多的默认控件(widgets)
  • 更多的示例
  • 动画
  • 运行时修改views / widgets / screens
  • application分割到不同的模块
  • 升级Theme
  • 支持Android, iOS and WebAssembly
  • 支持Vulkan / OpenGL

目前,不支持运行时修改widgets,这是硬伤啊,所以只能用在比较简单的GUI上,希望能尽快增加。

最简单的orbtk GUI窗口

创建工程

首先新建一个rust应用程序工程

  1. cargo new orbtkgui:创建一个orbtkgui工程
  2. cd orbtkgui:进入工程目录

然后,在cargo.toml中添加orbtk依赖

[dependencies]
orbtk = "0.2.27"

如果想用最新的orbtk版本,可以在cargo.toml的dependencies行添加如下代码:

orbtk = { git = https://gitlab.redox-os.org/redox-os/orbtk.git }

OrbTk 0.3.0版本进行了重新开放,和以前的版本不兼容

然后,在main.rs中输入如下代码:

use orbtk::*;

fn main() {
    let mut application = Application::default();

    application
        .create_window()
        .with_bounds(Bounds::new(100, 100, 640, 420))
        .with_title("OrbTk - simple gui")
        .with_root(Template::default())
        .build();
    application.run();
}

cannot find -lSDL2错误

第一个orbtk gui项目已经创建完成,使用cargo run编译运行,我们会发现,没法编译,出现如下错误:

 note: ld: cannot find -lSDL2

这是因为orbtk使用SDL进行图形界面绘制,所以必须安装SDL2库。

安装SDL2

在msys2中可以直接pacman -S sdl2安装。

如果没有使用msys2,可以直接下载安装。

设置环境变量

orbtk项目在运行时需要SDL2.dll,在编译时需要链接SDL2.lib(或者SDL2.a)。所以需要把SDL2.dll的目录添加到path环境变量。把SDL2.lib目录添加到LIBRARY_PATH环境变量。

不想设置环境变量的同学,也可以在命令行输入如下脚本设置当前命令行环境。

set path=C:\msys64\mingw64\bin;%path%
set LIBRARY_PATH=C:\msys64\mingw64\lib

本人用的windows系统,非win系统类似

用msys2的同学切记,在msys2 shell里用 LIBRARY_PATH=/C/msys64/mingw64/lib是不行的。因为msys2中gcc时在windows下运行的,不是在msys2 shell内。可以把set LIBRARY_PATH=C:\msys64\mingw64\lib添加到msys2_shell.cmd中,在启动msys2时设置环境变量。

编译运行

ok,所有工作完成了,cargo run我们就可以看到一个空白的窗口了。

Orbtk-gui

代码说明

代码很简单

第一句use orbtk::*;引用orbtk库

main函数中let mut application = Application::default();创建一个application对象

main函数中

    application
        .create_window()
        .with_bounds(Bounds::new(100, 100, 640, 420))
        .with_title("OrbTk - simple gui")
        .with_root(Template::default())
        .build();
  • .create_window()创建了一个WindowBuilder对象
  • .build()使用windowbuilder对象的properties创建window对象和window内的widget tree(控件数)
  • .with_bounds(), .with_title(), .with_root()分别设置窗口大小、窗口标题、和窗口的根控件

.with_title()其实和.title="title string"是相同的,所以.with_bounds(), .with_title(), .with_root()三个函数顺序可以随意调整。我们可以看看源码:

pub fn with_bounds(mut self, bounds: Rect) -> Self {
    self.bounds = bounds;
    self
}

windowbuilder的.with_xxx()函数的定义都类似。就是设置的property的值,然后返回self,方便链式调用。windowbuider主要设置属性的函数有:

with_bounds(mut self, bounds: Rect):设置窗口大小和位置
with_title<S: Into<String>>(mut self, title: S):设置窗口标题
with_theme(mut self, theme: Theme):设置css样式,theme实际上是一个包含css样式的字符串
with_root(mut self, root: Template):设置窗口的根控件,orbtk的所有控件(button,combox等)都是Template
with_debug_flag(mut self, debug: bool):设置是否为debug模式,debug为true时,会在命令行控制台显示调试信息

最后一句application.run();渲染并启动消息循环。

本文代码

本文代码在https://github.com/hustlei/RustGuiOrbtkTutorial

可以使用cargo run --bin start命令编译运行

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

rust语言orbtk GUI基础(old2018)-1.orbtk入门 的相关文章

随机推荐

  • Python之配置日志的几种方式(logging模块)

    作为开发者 xff0c 我们可以通过以下3种方式来配置logging 1 xff09 使用Python代码显式的创建loggers handlers和formatters并分别调用它们的配置函数 xff1b 2 xff09 创建一个日志配置
  • 硬盘分区、挂载及Ubuntu系统安装

    Linux发行版按照打包方式划分主要包括Debian系 基于Dpkg Red Hat系 基于RPM Slackware系等 xff0c 其中Debian系 Red Hat系是我们所常见的 xff0c 前者包括Ubuntu Debian GN
  • Ubuntu安装cuDNN

    一 官网下载与自己CUDA版本匹配的安装包 cudnn xff08 版本号 xff09 tgz 二 安装cuDNN tar xzvf cudnn xff08 版本号 xff09 tgz cuda Tab sudo cp cuda inclu
  • MySQL配置SSL访问-WEB配置JDBC支持SSL

    WEB配置JDBC支持SSL Connector J 可以使用 SSL 加密 JDBC 驱动程序和服务器之间通信的所有数据 xff08 初始握手除外 xff09 启用连接加密会带来性能损失 xff0c 其严重程度取决于多种因素 xff0c
  • MySQL配置SSL访问-ETL配置JDBC支持SSL

    创建用户 SSL TLS 选项 除了基于用户名和凭据的常规身份验证之外 xff0c MySQL 还可以检查 X 509 证书属性 要为 MySQL 帐户指定 SSL TLS 相关选项 xff0c 请使用REQUIRE指定一个或多个tls o
  • Python 使用docx库操作word文档中的表格单元格内容

    1 导入库 from docx import Document 2 加载word文档对象 doc 61 Document path 3 定位表格 获取所有表格对象 tables 61 doc tables 获取word中第一个表格对象 ta
  • 人工智能导论(6)——机器学习(Machine Learning)

    文章目录 一 概述二 重点内容三 思维导图四 重点知识笔记1 概述1 1 基本概念1 2 机器学习的分类 2 常见有监督学习算法2 1 线性回归2 2 多项式回归2 3 支持向量机2 4 k 最近邻分类2 5 朴素贝叶斯2 6 决策树2 7
  • Ubuntu 22.04 Anaconda和jupyter notebook安装问题

    安装Anaconda的安装问题是 xff1a conda command not found 在terminal 输入 vim bashrc conda 初始化在最末端 xff0c 把带 都删除即可 前提是 xff0c 安装时候已经设置了路
  • 人工智能导论(10)——机器人(Robot)

    文章目录 一 概述二 重点内容三 思维导图四 重点知识笔记机器人分类工业机器人服务机器人一般机器人智能机器人机器人与人工智能 一 概述 机器人是靠自身动力和控制能力来实现各种功能的一种机器 本文将人工智能 34 机器人 34 基础知识整理为
  • Numpy系列(八):函数库之5傅里叶变换函数

    Numpy系列目录 文章目录 一 简介二 思维导图三 傅里叶变换基础知识1 傅里叶级数2 复数形式傅里叶级数3 傅里叶变换4 离散傅里叶变换 四 Numpy快速傅里叶变换1 标准FFT1 1 一维离散FFT1 2 一维离散FFT反变换1 3
  • Matplotlib系列(五):三维绘图

    Matplotlib系列目录 文章目录 一 简介二 思维导图三 Matplotlib三维图形1 绘制3d图形2 基本三维图像2 1 3d折线图2 2 3d散点图2 3 3d柱形图2 4 3d火柴图2 5 3d误差图 3 三维曲面3 1 3d
  • Seaborn系列(三):分布统计绘图(distribution)

    Seaborn系列目录 文章目录 1 分布统计绘图API概述2 displot单变量分布图 直方图 核密度 累积分布 2 1 displot函数绘制单变量分布图2 2 displot直方图kde图同时叠加绘制2 3 displot绘图同时叠
  • pytorch人工神经网络基础:线性回归神经网络(nn.Module+nn.Sequential+nn.Linear+nn.init+optim.SGD)

    线性回归是人工神经网络的基础 xff0c 线性回归属于有监督的学习 xff0c 即根据有标签 xff08 已知结果的数据 xff09 拟合线性方程权重 xff0c 然后根据拟合的方程预测未知数据 通常步骤为 xff1a 准备数据 xff1a
  • pytoch人工神经网络基础:最简单的分类(softmax回归+交叉熵分类)

    softmax回归分类原理 对于回归问题 xff0c 可以用模型预测值与真实值比较 xff0c 用均方误差这样的损失函数表示误差 xff0c 迭代使误差最小训练模型 那么分类问题是否可以用线性回归模型预测呢 最简单的方法就是用softmax
  • 汇编语言基础:寄存器和寻址方式

    文章目录 1 寄存器1 1 通用寄存器1 1 1 数据寄存器1 1 2 指针寄存器 Pointer Register 1 1 3 索引 变址 寄存器 1 2 段寄存器1 3 控制寄存器 2 寄存器寻址2 1 立即数2 2 寄存器寻址2 3
  • 在windows上安装配置msys2

    在windows上安装配置msys2 msys2安装启动msys2msys2中文乱码问题MSYS2 目录映射问题MSYS2 ln s软连接会复制目录的问题fastab配置文件目录的方法 msys2配置国内镜像源更新msys2安装git和vi
  • msys2软件包管理工具pacman常用命令

    pacman是arclinux中的软件管理工具 xff0c 也是widows上msys2默认的软件管理工具 pacman可以直接从网络上的软件仓库下载安装及删除软件 xff0c 自动处理依赖关系 xff0c 类似ubuntu中的apt ge
  • conemu配置(让conemu和cmder一样好用)

    ConEmu是一个非常好用的终端 xff0c 支持标签切换功能 xff0c 可以在conemu中同时打开cmd powershell msys2 bash wsl等等 自定义选项多 xff0c 非常好用 但是默认的conemu相比cmder
  • [RN坑] ERROR Error watching file for changes: EMFILE 解决办法。

    遇到此问题 xff0c 重装watchman即可解决 xff0c 解决办法如下 可能需要root权限 xff0c 请相应添加sudo命令 xff1a 1 卸载所有已安装的watchman xff1a brew uninstall force
  • rust语言orbtk GUI基础(old2018)-1.orbtk入门

    orbtk的api在2019 2进行了修改 xff0c 该文章为2018版 新版请转 新版orbtk gui基础 rust语言GUI库简述 rust目前已经有非常多的GUI方案 xff0c 大多数是绑定的其他语言编写的库 xff0c 如gt