rust语言orbtk GUI基础(old2018)-2.HelloWorld

2023-05-16

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

orbtk helloworld

我们在上一节的代码中加入一个helloworld的label:

use orbtk::*;

fn main() {
    let mut application = Application::default();
    
    //创建一个textblock,添加一个Label类型的属性
    let text_block=TextBlock::create()
        .with_property(Label::from("Hello, World!"));
    //创建root控件,把textBlock设置为子控件
    let root=Template::default()
        .as_parent_type(ParentType::Single)
        .with_child(text_block);

    application
        .create_window()
        .with_bounds(Bounds::new(100, 100, 320, 210))
        .with_title("OrbTk - helloworld")
        .with_resizable(true)//可以调整窗口大小
        .with_root(root)
        //.with_debug_flag(true)
        .build();
    application.run();
}

cargo run运行后界面如下:

orbtk-helloworld
注意:

  • TextBlock的定义是:pub struct TextBlock;
  • 但是TextBlock::create()函数返回的是一个Template
  • .with_property()是Template的函数,返回self,类型是Template
  • Label是一个属性(Property),不是一个控件(widget)
  • root控件定义时必须调用as_parent_type()函数设置ParentType属性

parent_type是什么,root为什么必须要设置呢?

parent_type是Template的一个成员,类型为ParentType,它指示Template控件能够添加子控件的个数。

ParentType定义为:

pub enum ParentType {
    None,//表示不能添加子控件
    Single,//只能添加一个子控件
    Multi,//可以添加多个子控件
}

当添加子控件到一个widget template时。

  • 如果parent_typeParentType::None,则函数自动跳过,什么也不添加
  • 如果parent_typeParentType::Single,则只能添加一个子控件,如果已经有一个子控件,则覆盖/替换
  • 如果parent_typeParentType::Multi,则可以添加任意多个子控件到当前控件的Template

所以,在添加子控件之前必须设置parent_type。事实上orbtk内建的控件都有默认的parent_type值,比如row,colomn等默认为Multi,Button等默认为Single。

使用链式调用方法

orbtk的属性设置,控件(widget)创建都是支持链式调用的,所以像text_block等不需要绑定到变量上,代码看上去也更减短。如下代码与上节helloworld代码效果完全相同

use orbtk::*;

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

    let root = Template::default()
        .as_parent_type(ParentType::Single)
        .with_child(TextBlock::create().with_property(Label::from("Hello, World!")));

    application
        .create_window()
        .with_bounds(Bounds::new(100, 100, 320, 210))
        .with_title("OrbTk - helloworld")
        .with_resizable(true)
        .with_root(root)
        //.with_debug_flag(true)
        .build();
    application.run();
}

本文代码

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

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

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

rust语言orbtk GUI基础(old2018)-2.HelloWorld 的相关文章

随机推荐

  • 硬盘分区、挂载及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
  • rust语言orbtk GUI基础(old2018)-2.HelloWorld

    orbtk的api在2019 2进行了修改 xff0c 该文章为2018版 新版请转 新版orbtk gui基础 orbtk helloworld 我们在上一节的代码中加入一个helloworld的label xff1a use orbtk