首页 > 其他分享 >使用Terminal.Gui构建功能强大的.NET控制台应用

使用Terminal.Gui构建功能强大的.NET控制台应用

时间:2024-07-10 09:00:59浏览次数:15  
标签:Gui Pos Terminal Application new NET

前言

前段时间分享了一个库帮你轻松的创建漂亮的.NET控制台应用程序 - Spectre.Console的文章教程,然后就有小伙伴提问:.NET控制台应用需要应对强交互性的场景,有什么好的解决方案?,今天大姚给大家分享一款适用于.NET的跨平台终端 UI 工具包,帮助大家快速构建功能强大的.NET控制台应用:Terminal.Gui。

项目介绍

Terminal.Gui是一个跨平台(Windows、Mac 和 Linux/Unix )、开源(遵循 MIT License)、免费的用于为.NET、.NET Core 和 Mono 构建丰富功能的控制台应用程序的工具包,并且该工具包适用于需要强交互性的场景。

项目特点

  • 跨平台支持:可在Windows、Mac和Linux/Unix上运行。

  • 键盘和鼠标输入:支持键盘和鼠标输入,包括拖放支持。

  • 灵活布局:同时支持绝对布局和创新的计算布局系统 (Computed Layout)。Computed Layout 使控件之间的相对布局变得容易,并支持动态终端 UI。

  • 剪贴板支持:通过 Clipboard 类提供文本的剪切、复制和粘贴功能。

  • 任意视图:所有可见的 UI 元素都是 View 类的子类,这些子类可以包含任意数量的子视图。

  • 高级应用特性:主循环支持处理事件、空闲处理程序、计时器和监控文件描述符。大多数类对于线程来说都是安全的。

  • 响应式扩展 (Reactive Extensions):使用响应式扩展并受益于提高的代码可读性,以及应用 MVVM 模式和 ReactiveUI 数据绑定的能力。

快速上手

安装.NET Core SDK

上手体验之前,我们首先要安装好.NET运行、开发环境。

  • 下载地址:https://dotnet.microsoft.com/zh-cn/download

安装Terminal.Gui.Templates

dotnet new install Terminal.Gui.templates

创建一个新的Terminal.Gui 模板项目

dotnet new tui -n TestTerminalGui

编译并运行项目

cd TestTerminalGui
dotnet run

创建TerminalGuiExercise控制台应用

首先我们创建名为:TerminalGuiExercise的控制台应用。

安装Terminal.Gui包

消息框代码

        static void Main(string[] args)
        {
            #region 消息框代码

            Application.Init();

            MessageBox.Query(100, 15,
               "Question", "Do you like console apps?", "Yes", "No");

            Application.Shutdown();

            #endregion
        }

简单的文本用户界面示例代码

创建一个简单的带菜单栏的文本用户界面示例代码:

        static void Main(string[] args)
        {
            #region 创建一个简单的带菜单栏的文本用户界面示例代码

            Application.Init();
            var menu = new MenuBar(new MenuBarItem[] {
            new MenuBarItem ("_File", new MenuItem [] {
                new MenuItem ("_Quit", "", () => {
                    Application.RequestStop ();
                })
            }),});

            var win = new Window("追逐时光者,你好!!!")
            {
                X = 0,
                Y = 1,
                Width = Dim.Fill(),
                Height = Dim.Fill() - 1
            };

            Application.Top.Add(menu, win);
            Application.Run();
            Application.Shutdown();

            #endregion
        }

用户登录示例代码

using Terminal.Gui;

namespace TerminalGuiExercise
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //用户登录示例
            Application.Run<UserLoginExampleWindow>();
        }
    }

    public class UserLoginExampleWindow : Window
    {
        public TextField usernameText;

        public UserLoginExampleWindow()
        {
            Title = "用户登录示例应用程序(Ctrl+Q退出)";

            //创建输入组件和标签
            var usernameLabel = new Label()
            {
                Text = "用户名:",
                Y = 5
            };

            usernameText = new TextField("")
            {
                X = Pos.Right(usernameLabel),
                Y = Pos.Bottom(usernameLabel) - 1,
                Width = Dim.Fill(),
            };

            var passwordLabel = new Label()
            {
                Text = "密码:",
                X = Pos.Left(usernameLabel),
                Y = Pos.Bottom(usernameLabel) + 5
            };

            var passwordText = new TextField("")
            {
                Secret = true,
                X = Pos.Left(usernameText),
                Y = Pos.Top(passwordLabel),
                Width = Dim.Fill(),
            };

            //创建登录按钮
            var btnLogin = new Button()
            {
                Text = "登录",
                Y = Pos.Bottom(passwordLabel) + 1,
                X = Pos.Center(),
                IsDefault = true,
            };

            //单击登录按钮时显示消息弹出
            btnLogin.Clicked += () =>
            {
                if (usernameText.Text == "admin" && passwordText.Text == "123456")
                {
                    MessageBox.Query("登录结果", "登录成功", "Ok");
                    Application.RequestStop();
                }
                else
                {
                    MessageBox.ErrorQuery("登录结果", "用户名或密码不正确", "Ok");
                }
            };

            //将视图添加到窗口
            Add(usernameLabel, usernameText, passwordLabel, passwordText, btnLogin);
        }
    }
}

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看

标签:Gui,Pos,Terminal,Application,new,NET
From: https://blog.csdn.net/qq_37237487/article/details/140280962

相关文章

  • 16、 Django-多表操作-多个模块的关联-一对一的增删改查- models.onetoone()
    一对一不是数据库的一个连表操作、而是Django独有的一个连表操作、一对一相当于是特殊的一对多的关系、只是相当于加了unique=True models.pyfromdjango.dbimportmodels#身份证classIDCard(models.Model):idcard_num=models.CharField(max_length=18,unique=......
  • TextCNN: Convolutional Neural Networks for Sentence Classification
    本文是CNN应用在NLP领域的开山之作。TextCNN的成功并不是网络结构的成功,而是通过引入已经训练好的词向量在多个数据集上达到了超越benchmark的表现,证明了构造更好的embedding,是提升NLP各项任务的关键能力。作者做了一系列实验,这些实验使用卷积神经网络(CNN)在预训练的词向量之上......
  • 【Python_GUI】tkinter常用组件——文本类组件
    文本时窗口中必不可少的一部分,tkinter模块中,有3种常用的文本类组件,通过这3种组件,可以在窗口中显示以及输入单行文本、多行文本、图片等。Label标签组件Label组件的基本使用Label组件是窗口中比较常用的组件,通常用于添加文字或图片,还可以定义Label组件中文字和图片的排列方式......
  • Dotnet算法与数据结构:Hashset, List对比
    哈希集A是存储唯一元素的集合。它通过在内部使用哈希表来实现这一点,该哈希表为基本操作(如添加、删除和包含)提供恒定时间平均复杂度(O(1))。此外,不允许重复元素,使其成为唯一性至关重要的场景的理想选择。另一方面,表示按顺序存储元素的动态数组。它允许重复元素并提供对元素的索引......
  • WSL 安装 garnet 作为缓存服务
     一、下载wgethttps://github.com/microsoft/garnet/releases/download/v1.0.15/linux-x64-based.tar.xz二、解压mkdirgarnettar-xflinux-x64-based.tar.xz-Cgarnet 三、运行cdgarnet./GarnetServer确保本机有安装dotnet运行时。sudoapt-getup......
  • Xterminal工具的安装与使用体验
    Xterminal工具的安装与使用体验一、Xterminal简介二、Xterminal核心特性三、Xterminal使用场景四、Xterminal下载地址五、Xterminal的基本使用5.1设置仓库密码5.2SSH连接5.3Windows远程桌面5.4笔记功能5.5AI工具六、总结一、Xterminal简介Xterminal是一款专为......
  • jmeter分布式no-gui 测试报告
    1、远程测试https://jmeter.apache.org/usermanual/remote-test.html 2、 3、进行分布式压测是,服务器需要先启动jmeter-sever,启动jmeter-sever建议加上nobup,后开运行,停止服务时,先停master,在停slave,不然可能有问题。linux上具体的压测命令如下:只有一台服务时,若堡垒机可......
  • 深入解析:api-ms-win-net-isolation-l1-1-0.dll的角色与丢失修复指南
    api-ms-win-net-isolation-l1-1-0.dll是一个Windows操作系统中的动态链接库(DLL)文件,它与网络隔离功能相关,属于WindowsAppContainer和WindowsSandbox功能的一部分。这个DLL文件负责处理网络请求的隔离,确保应用程序在AppContainer或Sandbox环境中只能访问授权的网络资源,这对于增......
  • linux学习之登录密码(ssh/telnet)
    在Linux系统中,用户登录密码是用于安全验证用户身份的一种方式。登录密码通常是加密后存储在系统的/etc/shadow文件中。如果您想要获取Linux系统中用户的登录密码,这通常是不可能的,因为密码是经过加密处理的,而且出于安全考虑,没有直接的方式可以获取它们的明文形式。/etc/passwd......
  • ASP.Net Core解读launchSettings.json
    一、环境目标框架:.NETCore3.1ASP.NETCore是一个全新的Web开发平台,微软在它上面构建了MVC、SingalR、GRPC、Orleans这样广泛使用的Web框架,我们先以MVC框架为例介绍利用ASP.NETCore构建项目的常见名词。这篇文章介绍启动配置文件launchSettings.json ASP.NET Core MVC项目......