rust语言Orbtk GUI库-3.1 orbtk基础控件

2023-05-16

orbtk基础控件demo

orbtk目前内置的基础控件包括:

  • TextBlock
  • TextBox
  • Button
  • ToggleButton
  • check_box
  • Switch
  • FontIconBlock
  • ImageWidget
  • WaterMarkTextBlock

Orbtk中所有的控件都使用create()方法创建,比如:

let btn=Button::create();
let text_block=TextBlock::create();
let grid=Grid::create();

控件创建后,可以通过链式调用的方法设置属性,比如:

let btn = Button::create()   //创建button
    .text("btn")             //设置按钮文本
    .font_icon(FontIcon::from(CHECK_FONT_ICON)) //设置按钮图标
    .enabled(Enabled(true)); //设置是否可用

控件的属性大多都有默认值,比如:Button控件文本默认为"button",enabled默认为可用等等。所以不设置属性,大多数控件都能正常显示。

暂时先不管每个控件可以设置哪些属性,现在我们先创建一个包含所有基础控件的简单demo,看看效果。

  1. 首先创建控件
  2. 然后把控件都添加到一个Stack布局控件内
  3. 把布局控件添加到一个Template内
  4. 创建窗口时,把Template设置为root

之所以把所有控件都放在一个布局控件内,是因为:

  • 窗口的root只能是Template实例
  • Template只能有一个child,如果多次添加子控件时,后添加的子控件会替代先添加的

代码如下:

use orbtk::*;

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

    //创建控件
    let text_block = TextBlock::create().text("textblock");
    let text_box = TextBox::create().text("textbox");
    let water_mark_text_box = TextBox::create().water_mark(WaterMark::from("watermark..."));
    let btn = Button::create().text("button");
    let toggle_btn = ToggleButton::create().text("togglebutton");
    let switch = Switch::create();
    let check_box = CheckBox::create().text("checkbox");
    let font_icon_block = FontIconBlock::create().font_icon(FontIcon::from(CHECK_FONT_ICON));
    let image_widget = ImageWidget::create().image("src/bin/img/home.png");
    let water_mark_text_block = WaterMarkTextBlock::create()
        .text(String::new())
        .water_mark(WaterMark::from("watermark..."));
    
    //控件放入Stack布局控件,因为Template只能添加一个子控件
    let layout = Stack::create()
        .width(150.0)
        .child(text_block)
        .child(text_box)
        .child(water_mark_text_box)
        .child(btn)
        .child(toggle_btn)
        .child(switch)
        .child(check_box)
        .child(font_icon_block)
        .child(image_widget)
        .child(water_mark_text_block);

    let root = Template::default().child(layout);

    application
        .create_window()
        .bounds(Bounds::new(100.0, 100.0, 320.0, 260.0))
        .title("OrbTk - Primitive Widgets-1")
        .resizable(true)
        .root(root)
        //.debug_flag(true)
        .build();

    application.run();
}

当然,上述代码只是为了方便入门学习看代码,可以用更加Rustacean的方式写代码:

use orbtk::*;

struct MainView;

impl Widget for MainView {
    type Template = Template;

    fn create() -> self::Template {
        Template::default().child(
            Stack::create()
                .max_width(150.0)
                .child(TextBlock::create().text("textblock"))
                .child(TextBox::create().text("textbox"))
                .child(TextBox::create().water_mark(WaterMark::from("watermark...")))
                .child(Button::create().text("button"))
                .child(ToggleButton::create().text("togglebutton"))
                .child(Switch::create())
                .child(CheckBox::create().text("checkbox"))
                .child(FontIconBlock::create().font_icon(FontIcon::from(CHECK_FONT_ICON)))
                .child(ImageWidget::create().image("src/bin/img/home.png"))
                .child(
                    WaterMarkTextBlock::create()
                        .text(String::new())
                        .water_mark(WaterMark::from("watermark...")),
                ),
        )
    }
}

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

    application
        .create_window()
        .bounds((100.0, 100.0, 320.0, 260.0))
        .title("OrbTk - Primitive Widgets-1")
        .resizable(true)
        .root(MainView::create())
        //.debug_flag(true)
        .build();
    application.run();
}

cargo run编译运行后显示窗口如下:

orbit-primitivewidgets

对比上一节可以发现,这些代码只是比helloworld增加了一个Stack布局控件,和一些控件。布局控件暂时先不管,本节我们就看一下,这些控件都应该怎么创建和使用?

orbtk控件通用方法

orbtk所有控件都是通过包装Template来实现的,控件的成员变量不可访问,控件的所有操作(包括设置属性)都只能通过调用成员方法来实现。

orbtk的控件包括一些通用方法和每个控件独有的方法。通用方法是所有的控件(包括布局控件)都有的方法,我们首先了解一下orbtk控件都有哪些通用方法:

  • parent_type:设置控件是否能够添加子控件以及能够添加子控件的个数
  • child:为控件添加子控件
  • visibility:设置是否可见
  • enabled:是否可用
  • selector:设置css关联的选择器,class等
  • margin:设置边距
  • horizontal_alignment:设置水平对齐方式
  • vertical_alignment:设置垂直对齐方式
  • debug_name:设置控件的debug_name
  • width:设置宽度
  • height:设置高度
  • size(width,height):设置宽度和高度
  • min_width
  • min_height
  • max_size
  • max_width
  • max_height
  • max_size

child()方法为控件添加子控件,当然有一些控件是不能添加子控件的,但是仍然有child方法,child方法的行为和parent_type有关。

parent_type方法设置控件是否能够添加子控件以及能够添加多少个子控件。parent_type方法的参数为ParentType枚举,有三个值

  • parent_type(ParentType::None),则控件不能有子控件,调用child函数时会自动跳过,什么也不添加
  • parent_type(ParentType::Single),则控件只能添加一个子控件,如果已经有一个子控件,再添加控件则会覆盖/替换
  • parent_type(ParentType::Multi),则控件可以添加任意多个子控件

每个控件都有默认的parent_type,所以通常不需要调用这个方法。

visibility:设置是否可见,该方法的参数为Visibility枚举,有三个值:

  • Visibility::Visible:可见
  • Visibility::Hidden:控件隐藏,但是控件仍然占据它所在的位置
  • Visibility::Collapsed:控件隐藏,并且不占位置

enabled的用法非常简单:enabled(false)禁用控件,enabled(true)启用控件

selector是用于为控件设置css样式的。

TextBlock::create()
    .selector(Selector::from("textblock").class("h1")) //设置控件的css选择器和class

margin设置控件的外边距,margin的参数可以是一个数值,也可以是元组,也可以是Margin实例。

  • .margin(6.0):设置4个边距都为6,参数为f64类型
  • .margin((6.0,3.0)):设置左右边距为6,上下边距为3
  • .margin((1.0,2.0,3.0,4.0)):分别设置4个边距
  • .margin(Margin::new()):使用Margin实例参数设置边距。

Margin实例可以set_left、set_right、set_top、set_bottom方法设置参数,这四个方法不支持链式调用。left、right、top、bottom四个方法可以获取参数值。

horizontal_alignment,vertical_alignment两个方法类似,分别设置控件在母控件内对齐方式。两个函数的参数都是Alignment枚举,有四个值,意义很明确就不解释了

  • Alignment::Start
  • Alignment::Center
  • Alignment::End
  • Alignment::Stretch

debug_name方法用于为控件分配一个名字,这个名字在窗口debug_flag设置为true时,在控制台打印控件树。

width,height等方法用于设置控件的大小。

下面几个方法,也是所有控件都有的。其中attach_shared_property,state,event_handler三个方法和事件处理有关,其他几个方法可以用于自定义控件,本节我们知道有这些方法即可,暂时先不管这几个方法怎么用。

  1. attach_property():附加一个property到控件
  2. attach_shared_property():附加一个shared property到控件
  3. state():为控件添加一个state.
  4. event_handler():为控件添加一个事件处理器
  5. render_object():为控件设置渲染对象
  6. layout():为控件添加布局方式
  7. constraint():重写控件包装的template的constraint。其实width,min_width,max_size等都是包装的constaint功能。所以通常不要用这个方法。

Orbtk基础控件的主要方法

TextBlock控件

TextBlock控件的功能就是显示文本,不能编辑,不能交互。

除了控件通用方法外,TextBlock的方法还有:

  • text():设置文本内容
TextBlock::create().text("textblock")

WaterMarkTextBlock控件

WaterMarkTextBlock控件类似TextBlock,但是在文本为空的时候显示WaterMark的内容。

WaterMarkTextBlock控件的方法有:

  • text
  • water_mark
WaterMarkTextBlock::create()
    .text("")
    .water_mark("wartermark...")

TexBox控件

TextBox是一个文本框,可以交互输入。主要方法有:

  • text:文本框中的文字
  • water_mark:文本框中没有文字是显示watermark
  • padding:设置内边距
  • focused:光标是否在当前控件
  • text_selection:设置选中的文本
  • on_key_down:键盘按下添加事件处理函数

text和water_mark的参数都是字符串。

padding的参数可以是一个数值,也可以是元组,也可以是Padding实例。

  • .padding(6.0):设置4个边距都为6,参数为f64类型
  • .padding((6.0,3.0)):设置左右边距为6,上下边距为3
  • .padding((1.0,2.0,3.0,4.0)):分别设置4个边距
  • .padding(Padding::default()):使用Padding实例参数设置边距。

Padding只能用default()方法创建实例,分别用set_left、set_right、set_top、set_bottom方法设置参数,这四个方法不支持链式调用。left、right、top、bottom四个方法可以获取参数值。

focused的参数为bool类型。

text_selection((start_index: usize, length: usize))的参数分别为第一个字符位置和文本长度。

on_key_down方法本节我们暂时不管。

TextBox::create()
    .water_mark("watermark...")
    .padding((6.0,3.0))
    .focused(true)
    .enabled(true)
    .text_selection((2,4))

目前TextBox还不能用小键盘输入。

Button控件

Button控件是个按钮控件,ToggleButton是一个开关型按钮。支持的方法有:

  • text:设置按钮上的文本
  • font_icon:设置按钮上的图标
  • pressed:设置按钮是否按下
  • on_click:添加鼠标点击事件处理函数

用法非常简单,参考如下代码

Button::create()
    .text("btn")
    .font_icon(CHECK_FONT_ICON))
    .pressed(true)

font_icon的参数实际上是一个字符,也可以这样用:.font_icon("")。CHECK_FONT_ICON是一个内置的常量,也是一个字符。

checkbox

checkbox支持的方法有:

  • text:文本
  • font_icon:选中时复选框内显示的图标,默认为√
  • selected:是否选中

用法也非常简单:

CheckBox::create()
    .text("checkbox")
    .font_icon(FLOPPY_FONT_ICON)
    .selected(true)

Switch控件

witch控件支持的方法有:

  • Selected:是否为打开状态

用法同checkbox

Image控件

ImageWidget用于显示图片,支持的方法有:

  • image:设置图片路径
ImageWidget::create()
    .image("src/bin/img/home.png")

FontIconBlock控件

FontIconBlock显示一个FontIcon图标,图标为font内的特殊字体。支持的方法有:

  • font_icon:设置图标

该方法的参数实际上是一个&str,所以可以这样用:

FontIconBlock::create().font_icon("")

demo

我们应用控件的方法,重新创建一些控件看看

//! rust orbtk primitive widgets with properties
use orbtk::properties::Visibility;
use orbtk::*;

struct MainView;

impl Widget for MainView {
    type Template = Template;

    fn create() -> self::Template {
        Template::default().child(
            Stack::create()
                .max_width(140.0)
                .child(
                    TextBlock::create()
                        .text("textblock")
                        .visibility(Visibility::Hidden),
                )
                .child(TextBox::create().text("textboxfocused").focused(true))
                .child(TextBox::create().text("textboxdisabled").enabled(false))
                .child(TextBox::create().water_mark("textboxwatermark..."))
                .child(Button::create().text("button").margin((0.0, 2.0)))
                .child(
                    Button::create()
                        .text("primary button")
                        .margin((0.0, 2.0))
                        .selector(Selector::from("button").class("primary")),
                )
                .child(
                    Button::create()
                        .text("button with icon")
                        .margin((0.0, 2.0))
                        .font_icon(FontIcon::from(CHECK_FONT_ICON)),
                )
                .child(
                    ToggleButton::create()
                        .text("togglebuttontoggled")
                        .margin((0.0, 2.0))
                        .pressed(Pressed(true)),
                )
                .child(Switch::create().selected(true))
                .child(
                    CheckBox::create()
                        .text("checkbox with icon")
                        .font_icon(FontIcon::from(FLOPPY_FONT_ICON)),
                )
                .child(FontIconBlock::create().font_icon(FontIcon::from(CHECK_FONT_ICON)))
                .child(FontIconBlock::create().font_icon(FontIcon::from("")))
                .child(ImageWidget::create().image("src/bin/img/home.png"))
                .child(
                    WaterMarkTextBlock::create()
                        .text(String::new())
                        .water_mark(WaterMark::from("WaterMarkTextBlock...")),
                ),
        )
    }
}

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

    application
        .create_window()
        .bounds((100.0, 100.0, 300.0, 400.0))
        .title("OrbTk - Primitive Widgets with properties")
        .resizable(true)
        .root(MainView::create())
        //.debug_flag(true)
        .build();
    application.run();
}

编译运行后效果如下:

orbtk-primitive_widgets2

本文代码

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

可以使用下面命令编译运行

cargo run --bin primitive_widgets
cargo run --bin primitive_widgets2

文章分类:rust语言Orbtk GUI库入门

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

rust语言Orbtk GUI库-3.1 orbtk基础控件 的相关文章

  • VMware Esxi 8.0 直通Nvidia P40显卡

    目录 一 前言 二 错误信息 三 解决过程 一 前言 接到一个客户需求 xff0c 想在Esxi上直通Nvidia P40显卡 xff0c 直通后无法打开虚拟机 二 错误信息 下图是错误信息 xff0c 如图所示 xff0c 任务名称 打开
  • iOS 不规则瀑布流

    iOS 自从出了UICollectionview之后 界面的样式可谓更加的多元化 对于一些较为复杂的界面UICollectionview都可以相对轻松的实现 而且由于其 FlowLayout 子类的存在 界面的布局更可谓是随心所欲 下面就来
  • php7.4 docker 安装mongodb扩展

    Dockerfile 下面的pecl install mongodb的就是安装命令 FROM php 7 4 12 fpm RUN mv etc apt sources list etc apt sources list bak COPY
  • linux下wireshark安装和使用

    Wireshark是世界上最流行的网络分析工具 这个强大的工具可以捕捉网络中的数据 xff0c 并为用户提供关于网络和上层协议的各种信息 与很多其他网络工具一样 xff0c Wireshark也使用pcap network library来
  • HDU3700 Cat 恶心模拟题

    Problem Address xff1a http acm hdu edu cn showproblem php pid 61 3700 前言 终于又A了一道恶心的模拟题 看来HDU恶心题还是蛮多的 思路 扫描一遍 xff0c 如果有时间
  • Linux Docker最简单有效设置mysql 编码为utf8mb4解决乱码(三条命令解决)

    非常之简单高效 xff01 xff01 xff01 编辑my cnf span class token function vi span my cnf span class token comment 然后粘贴下面的并保存 span mys
  • 安利一款开源(3w star)的ssh、shell、cmd、sftp软件tabby(功能多、美观好用、支持插件)

    github地址 xff1a Tabby 官网 xff1a Tabby sh 用了之后非常之喜爱 xff0c 给作者点了个start xff0c 大家一起给这样的好开源软件点星星 自定义登录后脚本 对自己的配置可以设置快捷键快速打开一个该配
  • 远程控制ubuntu10.04

    由非linux平台连接到linux box有很多种方法 ubuntu本身就提供了XDMP VNC xff0c RDP等远程桌面登陆的方式 这些方式的实现比较简单 xff0c 没有使用多少数据压缩的技术 xff0c 因而远程时会感到比较慢 x
  • win10无线网卡共享网络给有线网卡再共享给其他电脑

    背景 xff1a 因项目主机为只有有线网卡的Linux系统 xff0c 需要联网安装一些程序 xff0c 需要win10的笔记本共享网络给项目主机 xff0c 但是调试环境下笔记本又只有连接手机热点的无线网络 xff0c 需要实现 笔记本无
  • 【解决错误】ModuleNotFoundError: No module named ‘PIL‘

    一 报错 Traceback span class token punctuation span most recent call last span class token punctuation span span class toke
  • 树莓派VNC配置教程

    VNC可以实现连接到树莓派后 xff0c 用电脑直接控制树莓派 xff0c 下面是VNC配置教程 xff1a 首先在电脑端上安装VNC xff08 官网下载地址 xff09 xff1a xff08 选择对应的版本 xff0c 下载安装即可
  • 用VSCode优雅的写MySQL

    一 SQL的部署 首先是部署MySQL xff0c 本地的MySQL在官网上下载包后 xff0c 按照默认的安装即可 xff0c 我使用的腾讯云的 云MySQL xff0c 可以到腾讯云官网租用 在租好数据库后 xff0c 进入控制台 xf
  • 机器学习笔记 五:逻辑回归(Logistics Regression)及两个分类案例

    目录 1 前言2 实现过程2 1 数据可视化过程2 2 Sigmoid函数2 3 代价函数 xff08 costFunction xff09 2 4 其他设置2 5 梯度下降函数2 5 1 梯度下降结果 xff08 初始参数为0 xff09
  • 器:ubnutu系统完美克隆至新硬盘,系统备份迁移至新硬盘(机器)

    一切皆为文件 xff0c 这个理念真酷 xff01 很好 xff01 ubuntu16 04 系统备份还原迁移至新机器 亲测可用 xff0c 刚刚克隆完毕 1 打包整个系统 xff1a sudo su cd tar czvpf sys ba
  • tools:nerd font debian(ubuntu maybe the same)

    i get garbled in my nerdtree try to fix this bug down load this by yourself bug nerdtree 显示图标乱码 CSDN博客 download font by
  • Ubuntu 设置环境变量问题总结

    一 动态链接库问题 最近一直被 error while loading shared libraies 错误困扰 xff0c 于是简单的总结了一下Ubuntu 环境变量的设置问题 从下面几个方面来说 xff1a 1 系统默认库 1 xff0
  • 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
  • rust语言orbtk GUI基础(old2018)-2.HelloWorld

    orbtk的api在2019 2进行了修改 xff0c 该文章为2018版 新版请转 新版orbtk gui基础 orbtk helloworld 我们在上一节的代码中加入一个helloworld的label xff1a use orbtk
  • rust语言orbtk GUI基础(old2018)-3.1 orbtk基础控件

    orbtk的api在2019 2进行了修改 xff0c 该文章为2018版 新版请转 新版orbtk gui基础 rust orbtk基础widgets orbtk基础控件demoorbtk控件使用方法orbtk控件原理创建控件为控件添加子
  • rust语言Orbtk GUI库-3.orbtk 控件简介

    2019 9 updated orbtk支持的控件还不是很多 xff0c 目前orbtk内置的控件主要有 xff1a 基础控件 TextBlock xff1a 显示文本 xff0c 不可编辑 xff0c 不可交互TextBox xff1a
  • rust语言Orbtk GUI库-3.1 orbtk基础控件

    orbtk基础控件demo orbtk目前内置的基础控件包括 xff1a TextBlockTextBoxButtonToggleButtoncheck boxSwitchFontIconBlockImageWidgetWaterMarkT