日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

用Rust進(jìn)行TUI編程:Cursive庫

來源: 責(zé)編: 時(shí)間:2024-05-17 17:48:02 268觀看
導(dǎo)讀在本文中,我們將探索使用Rust進(jìn)行文本用戶界面(TUI)編程。TUI提供了一種通用的方法來創(chuàng)建具有豐富圖形用戶界面的交互式命令行應(yīng)用程序。我們將使用Cursive庫,一個(gè)流行的用于構(gòu)建TUI應(yīng)用程序的Rust庫。Cursive使用聲明

在本文中,我們將探索使用Rust進(jìn)行文本用戶界面(TUI)編程。TUI提供了一種通用的方法來創(chuàng)建具有豐富圖形用戶界面的交互式命令行應(yīng)用程序。我們將使用Cursive庫,一個(gè)流行的用于構(gòu)建TUI應(yīng)用程序的Rust庫。jJb28資訊網(wǎng)——每日最新資訊28at.com

Cursive使用聲明式UI:用戶定義布局,然后Cursive處理事件循環(huán)。Cursive還處理大多數(shù)輸入(包括鼠標(biāo)點(diǎn)擊),并將事件轉(zhuǎn)發(fā)到當(dāng)前聚焦的視圖。用戶代碼更關(guān)注“事件”,而不是鍵盤輸入。jJb28資訊網(wǎng)——每日最新資訊28at.com

它非常適合更復(fù)雜的應(yīng)用程序,具有嵌套的視圖樹、菜單和彈出窗口。jJb28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jJb28資訊網(wǎng)——每日最新資訊28at.com

jJb28資訊網(wǎng)——每日最新資訊28at.com

創(chuàng)建項(xiàng)目

使用以下命令創(chuàng)建一個(gè)Rust新項(xiàng)目:jJb28資訊網(wǎng)——每日最新資訊28at.com

cargo new cursive_example

jJb28資訊網(wǎng)——每日最新資訊28at.com

然后,將Cursive添加到Cargo.toml文件中:jJb28資訊網(wǎng)——每日最新資訊28at.com

[dependencies]cursive = "0.20.0"

jJb28資訊網(wǎng)——每日最新資訊28at.com

jJb28資訊網(wǎng)——每日最新資訊28at.com

Cursive應(yīng)用程序的基本結(jié)構(gòu)jJb28資訊網(wǎng)——每日最新資訊28at.com

一個(gè)典型的Cursive應(yīng)用程序主要包括三個(gè)階段:jJb28資訊網(wǎng)——每日最新資訊28at.com

1,創(chuàng)建一個(gè)Cursive對(duì)象:我們從創(chuàng)建一個(gè)Cursive對(duì)象開始。cursive::default()方法可以幫助我們完成這項(xiàng)任務(wù)。jJb28資訊網(wǎng)——每日最新資訊28at.com

2,配置Cursive對(duì)象:在創(chuàng)建了Cursive對(duì)象之后,我們根據(jù)應(yīng)用程序的需要對(duì)它進(jìn)行配置。jJb28資訊網(wǎng)——每日最新資訊28at.com

3,執(zhí)行Cursive Object:最后,我們運(yùn)行Cursive對(duì)象來啟動(dòng)應(yīng)用程序。jJb28資訊網(wǎng)——每日最新資訊28at.com

下面是一個(gè)最簡(jiǎn)單的Cursive應(yīng)用:jJb28資訊網(wǎng)——每日最新資訊28at.com

fn main() {    // 創(chuàng)建一個(gè)Cursive對(duì)象    let mut siv = cursive::default();    // 執(zhí)行Cursive對(duì)象    siv.run(); }

jJb28資訊網(wǎng)——每日最新資訊28at.com

運(yùn)行這個(gè)程序,你會(huì)看到一個(gè)空白的應(yīng)用程序窗口。jJb28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jJb28資訊網(wǎng)——每日最新資訊28at.com

jJb28資訊網(wǎng)——每日最新資訊28at.com

增加退出應(yīng)用程序的方式

Cursive將用戶輸入作為事件處理,默認(rèn)情況下,許多事件被忽略。為了允許用戶通過按' q '退出應(yīng)用程序,我們可以在根Cursive對(duì)象上使用add_global_callback方法:jJb28資訊網(wǎng)——每日最新資訊28at.com

siv.add_global_callback('q', |s| s.quit());

此代碼片段添加了一個(gè)全局回調(diào),該回調(diào)監(jiān)聽' q '鍵并在觸發(fā)時(shí)退出應(yīng)用程序。jJb28資訊網(wǎng)——每日最新資訊28at.com

jJb28資訊網(wǎng)——每日最新資訊28at.com

jJb28資訊網(wǎng)——每日最新資訊28at.com

Cursive視圖

視圖是Cursive應(yīng)用程序中用戶界面的核心構(gòu)建塊,它們定義在終端上顯示的內(nèi)容。視圖可以是簡(jiǎn)單的元素,比如文本,也可以是復(fù)雜的小部件,比如復(fù)選框。jJb28資訊網(wǎng)——每日最新資訊28at.com

要顯示文本消息,我們可以使用TextView::new("text")構(gòu)造函數(shù)。最初,屏幕是空的,所以我們需要使用add_layer創(chuàng)建一個(gè)層。add_layer的參數(shù)應(yīng)該是我們想要作為新圖層顯示的視圖。jJb28資訊網(wǎng)——每日最新資訊28at.com

下面是一個(gè)顯示“Hello TUI!”消息,并允許用戶通過按' q '退出應(yīng)用程序:jJb28資訊網(wǎng)——每日最新資訊28at.com

use cursive::views::TextView;fn main() {    // 創(chuàng)建一個(gè)Cursive對(duì)象    let mut siv = cursive::default();    // 添加一個(gè)全局回調(diào),當(dāng)按下'q'時(shí)退出應(yīng)用程序    siv.add_global_callback('q', |s| s.quit());    // 添加一個(gè)TextView與我們的消息作為一個(gè)新的圖層    siv.add_layer(TextView::new("Hello TUI! 按<q>退出."));    // 執(zhí)行Cursive對(duì)象    siv.run(); }

jJb28資訊網(wǎng)——每日最新資訊28at.com

運(yùn)行此程序?qū)@示“Hello TUI!”,按<q>鍵退出。jJb28資訊網(wǎng)——每日最新資訊28at.com

圖片jJb28資訊網(wǎng)——每日最新資訊28at.com

jJb28資訊網(wǎng)——每日最新資訊28at.com

對(duì)話框

對(duì)話框通常用于在TUI應(yīng)用程序中創(chuàng)建交互式的和用戶友好的基于文本的彈出窗口。它們?cè)试S你向用戶呈現(xiàn)信息,并通過按鈕和回調(diào)收集輸入,從而增強(qiáng)用戶體驗(yàn)。jJb28資訊網(wǎng)——每日最新資訊28at.com

讓我們使用對(duì)話框,這是一個(gè)封裝器,封裝另一個(gè)視圖,包括標(biāo)題和選擇按鈕。而不是直接使用TextView。jJb28資訊網(wǎng)——每日最新資訊28at.com

Dialog::around函數(shù)直接接受一個(gè)視圖,所以我們可以直接提供TextView:jJb28資訊網(wǎng)——每日最新資訊28at.com

siv.add_layer(Dialog::around(TextView::new("Question 1")));

jJb28資訊網(wǎng)——每日最新資訊28at.com

由于在文本視圖中創(chuàng)建對(duì)話框窗口是一個(gè)常見的任務(wù),dialog::text是一個(gè)可以直接完成此任務(wù)的函數(shù),使我們的代碼更短(并且我們不再需要導(dǎo)入cursive::views::TextView)。jJb28資訊網(wǎng)——每日最新資訊28at.com

siv.add_layer(Dialog::text("Empty"));

jJb28資訊網(wǎng)——每日最新資訊28at.com

我們可以使用Dialog::title方法添加標(biāo)題。jJb28資訊網(wǎng)——每日最新資訊28at.com

use cursive::views::{TextView, Dialog};fn main() {    // 創(chuàng)建一個(gè)Cursive對(duì)象    let mut siv = cursive::default();    // 添加一個(gè)全局回調(diào),當(dāng)按下'q'時(shí)退出應(yīng)用程序    siv.add_global_callback('q', |s| s.quit());    siv.add_layer(Dialog::text("did you do the thing?").title("This is the title"));    // 執(zhí)行Cursive對(duì)象    siv.run(); }

jJb28資訊網(wǎng)——每日最新資訊28at.com

如果我們運(yùn)行這段代碼,我們將看到一個(gè)沒有按鈕的對(duì)話框窗口。jJb28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jJb28資訊網(wǎng)——每日最新資訊28at.com

jJb28資訊網(wǎng)——每日最新資訊28at.com

按鈕

我們的對(duì)話框看起來比單獨(dú)的TextView要好,但它仍然缺少一些動(dòng)作。我們來添加一些按鈕。jJb28資訊網(wǎng)——每日最新資訊28at.com

就像標(biāo)題一樣,Dialog有一個(gè)Dialog::button方法,用于添加帶有關(guān)聯(lián)動(dòng)作的按鈕。下面是如何使用Dialog::button添加按鈕:jJb28資訊網(wǎng)——每日最新資訊28at.com

use cursive::views::{TextView, Dialog};fn main() {    // 創(chuàng)建一個(gè)Cursive對(duì)象    let mut siv = cursive::default();    siv.add_layer(Dialog::text("...").title("Did you do the thing?")        .button("Yes", |s| s.quit())          .button("No", |s| s.quit())        .button("Uh?", |s| s.quit()));    // 執(zhí)行Cursive對(duì)象    siv.run(); }

jJb28資訊網(wǎng)——每日最新資訊28at.com

在這個(gè)例子中,對(duì)話框包括三個(gè)按鈕:“是”、“否”和“Uh?”,當(dāng)點(diǎn)擊時(shí),它們都有退出程序的動(dòng)作。但是,你可以通過使用自定義函數(shù)替換“|s| s.quit()”來定制操作。jJb28資訊網(wǎng)——每日最新資訊28at.com

運(yùn)行結(jié)果如下:jJb28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jJb28資訊網(wǎng)——每日最新資訊28at.com

讓我們?cè)谝粋€(gè)更實(shí)際的背景下探討這個(gè)問題:jJb28資訊網(wǎng)——每日最新資訊28at.com

use cursive::Cursive;use cursive::views::Dialog;fn main() {    let mut siv = cursive::default();    siv.add_layer(Dialog::text("This is a survey!/nPress <Next> when you're ready.")        .title("Important survey")        .button("Next", show_next));    siv.run();}fn show_next(_: &mut Cursive) {    // Leave this function empty for now}

jJb28資訊網(wǎng)——每日最新資訊28at.com

在這段代碼中,在用戶單擊“Next”之后,我們希望隱藏當(dāng)前對(duì)話框并顯示一個(gè)新對(duì)話框。我們使用Cursive::pop_layer來移除當(dāng)前圖層。jJb28資訊網(wǎng)——每日最新資訊28at.com

為了更好地理解pop_layer是如何工作的,讓我們分解這個(gè)過程:jJb28資訊網(wǎng)——每日最新資訊28at.com

use cursive::views::Dialog;use cursive::views::TextView;use cursive::Cursive;fn main() {    // 創(chuàng)建一個(gè)新的Cursive實(shí)例    let mut siv = cursive::default();    // 添加一個(gè)帶有標(biāo)題、文本和按鈕的對(duì)話框圖層。    siv.add_layer(        Dialog::text("Are you of legal age?")            .title("Question 1")            // 添加一個(gè)帶有Yes回調(diào)函數(shù)的按鈕            .button("Yes", yes)            // 添加一個(gè)帶有回調(diào)No函數(shù)的按鈕。            .button("No", no),    );    siv.run(); // Start the Cursive event loop.}fn yes(s: &mut Cursive) {    // 移除當(dāng)前對(duì)話框?qū)?   s.pop_layer();    // 添加一個(gè)帶有消息的TextView圖層    s.add_layer(TextView::new("Good! You can proceed."));}fn no(s: &mut Cursive) {    // 移除當(dāng)前對(duì)話框?qū)?   s.pop_layer();    // 添加一個(gè)帶有消息的TextView圖層    s.add_layer(TextView::new("You can't proceed!"));}

jJb28資訊網(wǎng)——每日最新資訊28at.com

正如你所看到的,Dialog視圖是呈現(xiàn)TextView的一種很好的方式,但它也適用于任何其他內(nèi)容。實(shí)際上,大多數(shù)的圖層都是以一個(gè)包含其他視圖的對(duì)話框開始。jJb28資訊網(wǎng)——每日最新資訊28at.com

jJb28資訊網(wǎng)——每日最新資訊28at.com

jJb28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

本文為使用Rust和Cursive庫構(gòu)建基于文本的用戶界面(TUI)提供了堅(jiān)實(shí)的起點(diǎn)。在此基礎(chǔ)上,你可以瀏覽文檔并深入研究更高級(jí)的TUI開發(fā)。jJb28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-88930-0.html用Rust進(jìn)行TUI編程:Cursive庫

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: JWT身份驗(yàn)證:.NET Core后臺(tái)與Vue.js前端實(shí)現(xiàn)詳解

下一篇: 精通Python單元測(cè)試:掌握Unittest模塊的終極指南

標(biāo)簽:
  • 熱門焦點(diǎn)
  • Mate60手機(jī)殼曝光 致敬自己的經(jīng)典設(shè)計(jì)

    8月3日消息,今天下午博主數(shù)碼閑聊站帶來了華為Mate60的第三方手機(jī)殼圖,可以讓我們?cè)谡鏅C(jī)發(fā)布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 俄羅斯:將審查iPhone等外國(guó)公司設(shè)備 保數(shù)據(jù)安全

    iPhone和特斯拉都屬于在各自領(lǐng)域領(lǐng)頭羊的品牌,推出的產(chǎn)品也也都是數(shù)一數(shù)二的,但對(duì)于一些國(guó)家而言,它們的產(chǎn)品可靠性和安全性還是在限制范圍內(nèi)。近日,俄羅斯聯(lián)邦通信、信息技術(shù)
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優(yōu)化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實(shí)現(xiàn)了一個(gè)流處理程序
  • SpringBoot中使用Cache提升接口性能詳解

    環(huán)境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架從 3.1 開始,對(duì) Spring 應(yīng)用程序提供了透明式添加緩存的支持。和事務(wù)支持一樣,抽象緩存允許一致地使用各
  • 共享單車的故事講到哪了?

    來源丨海克財(cái)經(jīng)與共享充電寶相差不多,共享單車已很久沒有被國(guó)內(nèi)熱點(diǎn)新聞關(guān)照到了。除了一再漲價(jià)和用戶直呼用不起了。近日多家媒體再發(fā)報(bào)道稱,成都、天津、鄭州等地多個(gè)共享單
  • 當(dāng)家的盒馬,加速謀生

    來源 | 價(jià)值星球Planet作者 | 歸去來自己&ldquo;當(dāng)家&rdquo;的盒馬,開始加速謀生了。據(jù)盒馬官微消息,盒馬計(jì)劃今年開放生鮮供應(yīng)鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經(jīng)與
  • 機(jī)構(gòu)稱Q2國(guó)內(nèi)智能手機(jī)銷量同比下滑4% vivo份額重回第1

    7月29日消息,根據(jù)市場(chǎng)調(diào)查機(jī)構(gòu)Counterpoint Research公布的最新報(bào)告,2023年第2季度中國(guó)智能手機(jī)銷量同比下降4%,創(chuàng)新自2014年以來第2季度銷量新低。報(bào)
  • 三星Galaxy Z Fold/Flip 5國(guó)行售價(jià)曝光 :最低7499元/12999元起

    據(jù)官方此前宣布,三星將于7月26日也就是明天在韓國(guó)首爾舉辦Unpacked活動(dòng),屆時(shí)將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • iQOO 11S評(píng)測(cè):行業(yè)唯一的200W標(biāo)準(zhǔn)版旗艦

    【Techweb評(píng)測(cè)】去年底,iQOO推出了“電競(jìng)旗艦”iQOO 11系列,作為一款性能強(qiáng)機(jī),該機(jī)不僅全球首發(fā)2K 144Hz E6全感屏,搭載了第二代驍龍8平臺(tái)及144Hz電競(jìng)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲高清免费在线| 亚洲欧洲一区二区在线观看| 欧美日韩国产一区二区| 欧美精品一区二区三区在线看午夜 | 久久精品二区| 久久一区视频| 欧美日韩视频在线观看一区二区三区 | 9久re热视频在线精品| 在线观看欧美日本| 亚洲精品国产精品国自产在线 | 在线看成人片| 亚洲人妖在线| 一色屋精品视频在线看| 亚洲精品久久久久久久久久久久久 | 欧美高清视频免费观看| 欧美视频日韩| 欧美日韩精品免费观看视一区二区| 欧美不卡一卡二卡免费版| 欧美激情精品久久久| 亚洲免费在线观看| 亚洲日本中文字幕| 国产亚洲精品久久久久动| 亚洲成在人线av| 亚洲午夜久久久久久尤物 | 国产乱码精品1区2区3区| 精品99一区二区| 亚洲一二三区精品| 亚洲夜间福利| 欧美/亚洲一区| 国产精品一区二区久久久| 亚洲国产成人久久综合一区| 亚洲欧美成人在线| 欧美绝品在线观看成人午夜影视| 欧美日韩精品免费观看视频| 欧美色图一区二区三区| 狠狠色狠色综合曰曰| 亚洲视频成人| 美女网站久久| 国产人成精品一区二区三| 日韩视频在线观看| 久久久久久午夜| 国产精品一区视频| 制服诱惑一区二区| 欧美国产第一页| 欧美午夜精品久久久久久孕妇| 国产精品高清在线| 国产精品久久亚洲7777| 国产精品xxx在线观看www| 在线观看亚洲一区| 亚欧美中日韩视频| 亚洲网站在线播放| 久久人人爽人人爽爽久久| 国产毛片久久| 亚洲午夜在线观看| 欧美伊人久久久久久午夜久久久久 | 国产综合一区二区| 亚洲一区二区三区高清| 亚洲宅男天堂在线观看无病毒| 亚洲你懂的在线视频| 欧美激情精品久久久久久| 在线国产亚洲欧美| 久久久久一区二区三区四区| 国产日本精品| 亚洲一区二区在线视频 | 看欧美日韩国产| 国产一级久久| 午夜日韩av| 国产精品看片资源| 在线看无码的免费网站| 久久aⅴ国产紧身牛仔裤| 国产精品久久久久久久久久尿| 欧美电影免费| 欧美视频福利| 国内精品一区二区| 亚洲美女在线视频| 模特精品在线| 国产精品国产三级国产普通话99 | 久热国产精品| 国内精品福利| 久久国产88| 韩国久久久久| 亚洲午夜一区二区三区| 久久精品五月| 国产精品一区在线播放| 亚洲欧美日韩系列| 蜜臀av国产精品久久久久| 狠久久av成人天堂| 久久看片网站| 亚洲一区二区四区| 国产精品毛片大码女人| 亚洲欧洲av一区二区| 国产精品亚洲不卡a| 欧美在线一二三区| 一区二区三区中文在线观看| 久久亚洲综合色一区二区三区| 欧美天天在线| 亚洲午夜精品一区二区三区他趣| 欧美搞黄网站| 狠狠入ady亚洲精品经典电影| 一区二区免费看| 欧美色图一区二区三区| 最新热久久免费视频| 欧美精品自拍偷拍动漫精品| 一片黄亚洲嫩模| 国产精品久久久久一区二区三区 | 久久av在线看| 精品盗摄一区二区三区| 欧美99久久| 日韩写真视频在线观看| 欧美午夜精品久久久久久久| 亚洲精品国产精品乱码不99按摩 | 免费观看在线综合色| 最新69国产成人精品视频免费| 欧美一区日本一区韩国一区| 国产一区日韩一区| 蜜臀av在线播放一区二区三区| 国产欧美亚洲日本| 久久久久久久久综合| 亚洲人成在线观看网站高清| 久久五月天婷婷| 亚洲精品少妇网址| 国产精品卡一卡二卡三| 久久久91精品| 亚洲美女啪啪| 国产欧美一区二区色老头| 免费在线观看成人av| 亚洲无人区一区| 好吊一区二区三区| 欧美专区在线观看| 欧美日韩一区在线观看视频| 亚洲电影成人| 欧美乱人伦中文字幕在线| 亚洲欧美日韩一区二区三区在线| 欧美视频免费| 久久久成人网| 在线精品国产欧美| 欧美色另类天堂2015| 久久av一区二区三区| 国产日韩欧美自拍| 欧美va天堂| 午夜伦理片一区| 亚洲国产一区二区精品专区| 美腿丝袜亚洲色图| 中文欧美在线视频| 国产精品久久久久久久久久尿 | 亚洲视频在线观看| 尤物99国产成人精品视频| 国产精品久久午夜| 欧美福利一区二区三区| 欧美一区二区三区精品 | 黄色在线一区| 欧美体内谢she精2性欧美| 一区二区三区久久网| 欧美视频在线不卡| 久热re这里精品视频在线6| 亚洲自拍另类| 亚洲乱码国产乱码精品精 | 国产精品jizz在线观看美国| 久久在线免费观看| 亚洲欧美日韩国产中文在线| 亚洲韩日在线| 欧美日韩国产综合视频在线观看| 一区二区三区日韩欧美精品| 狠狠入ady亚洲精品| 久热精品视频在线免费观看| 亚洲一区在线观看视频 | 欧美日韩网址| 嫩模写真一区二区三区三州| 欧美亚洲视频一区二区| 99re这里只有精品6| 在线欧美电影| 国产美女在线精品免费观看| 欧美日韩亚洲视频| 亚洲影视在线播放| 亚洲精品日韩精品| 亚洲成人在线观看视频| 国产丝袜一区二区| 国产精品久久久久免费a∨大胸 | 欧美.www| 快射av在线播放一区| 亚洲午夜av在线| 亚洲欧洲精品天堂一级| 在线观看一区视频| 欧美国产日韩免费| 麻豆国产精品va在线观看不卡| 亚洲麻豆av| 亚洲人在线视频| 亚洲国产成人一区| 黄色日韩网站| 国内精品免费在线观看| 国产欧美激情| 国产精品欧美久久| 欧美天堂在线观看| 欧美日韩国产色综合一二三四 | 亚洲在线观看视频网站| 国产精品网站视频| 欧美性大战xxxxx久久久| 欧美日韩裸体免费视频| 欧美精品一区二| 欧美一级视频精品观看| 亚洲一区在线播放| 亚洲影音一区| 亚洲欧美电影院| 欧美一级片在线播放|