GVKun编程网logo

如何在 linux 中显示来自 bash 脚本的 GUI 消息框?(linux显示bash-4.1)

6

对于想了解如何在linux中显示来自bash脚本的GUI消息框?的读者,本文将提供新的信息,我们将详细介绍linux显示bash-4.1,并且为您提供关于bash–如何在一分钟后在linux中启动sh

对于想了解如何在 linux 中显示来自 bash 脚本的 GUI 消息框?的读者,本文将提供新的信息,我们将详细介绍linux显示bash-4.1,并且为您提供关于bash – 如何在一分钟后在linux中启动shell脚本?、C# 表单在消息框/新表单中显示来自数据库/图表的排名列表、C#:GUI,用于显示来自Windows服务的实时消息、inno-setup – 如何在指定时间内显示消息框?的有价值信息。

本文目录一览:

如何在 linux 中显示来自 bash 脚本的 GUI 消息框?(linux显示bash-4.1)

如何在 linux 中显示来自 bash 脚本的 GUI 消息框?(linux显示bash-4.1)

我正在 Ubuntu linux 下编写一些小 bash 脚本。我希望能够从 GUI 运行它们,而无需终端窗口来输入任何输入或查看任何输出。

到目前为止,唯一需要的输入是 sudo 的密码 - 而 gksudo
处理得很好。但是我还没有找到一种简单的方法来显示消息框。是否有某种“gkmessage”命令可用?我更喜欢默认 Ubuntu
安装中存在的东西,但我不介意在必要时安装新包。

答案1

小编典典

我相信Zenity会做你想做的事。它是专门为从命令行显示 GTK
对话框而设计的,它以Ubuntu 软件包的形式提供。

bash – 如何在一分钟后在linux中启动shell脚本?

bash – 如何在一分钟后在linux中启动shell脚本?

如何在一分钟后启动 shell脚本?

假设有两个bash文件a.sh和b.sh
我想在a.sh执行一分钟(或几秒)后执行b.sh.
我应该在a.sh中编码什么?

简单.你想用’at’安排你的工作.和’约会’来计算你未来的时刻.

例:

echo b.sh | at Now + 1 minute

要么:

echo b.sh | at -t `date -v+60S "+%Y%m%d%H%M%s"`

-v 60S增加了60秒的当前时间.您可以精确控制要添加的秒数.

但通常情况下,当人们希望一个程序在一分钟之后启动时,他们并非100%确定它不会花费多于或少于一分钟.而已. b.sh可以在a.sh完成之前启动.或者a.sh可能比“计划”早30秒完成,而b.sh本来可以更快开始.

我会推荐一个不同的型号.哪个b.sh首先发布.a.sh在启动时创建临时文件. execute是任务并在最后删除其临时文件.b.sh监视要创建的临时文件,然后删除.并开始其任务.

C# 表单在消息框/新表单中显示来自数据库/图表的排名列表

C# 表单在消息框/新表单中显示来自数据库/图表的排名列表

如果我答对了,试试这个。您可以使用 LINQ 对图表/数据网格视图进行排序。

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApp9
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender,EventArgs e)
        {
            List<Product> products = new List<Product>(); // your chart/datagridview
            products.Add(new Product { Name = "Banana",Price = 1 }); 
            products.Add(new Product { Name = "Orange",Price = 10 }); 
            products.Add(new Product { Name = "Apple",Price = 5 }); // your products
            products = products.OrderByDescending(p => p.Price).ToList(); // ordering products by price
            StringBuilder sb = new StringBuilder();
            int i = 1;
            foreach (var product in products)
            {
                sb.Append($"{i}. {product.Name} - {product.Price}\n");
                i++;
            }
            MessageBox.Show(sb.ToString());
        }
    }
    class Product
    {
        public string Name { get; set; }
        public int Price { get; set; }
    }
}
,

使用数据绑定将数据(模型)与数据的显示方式(视图)分开。

您的 DataGridView 有一个数据源。用它来显示数据。

class DisplayedProduct
{
    public int Id {get; set;}
    public string Name {get; set;}
    public int Quantity {get; set;}
    public decimal Price {get; set;}
}

使用 Visual Studio 设计器创建列并告诉哪个列应该显示哪个属性,或者以编程方式执行此操作。

public MyForm : Form
{
    public MyForm()
    {
         this.InitializeComponent();

         this.columnId.DataPropertyName = nameof(DisplayedProdut.Id);
         this.columnName.DataPropertyName = nameof(DislayedProduct.Name);
         ...
    }

我会做很多小方法,所以它们会容易理解、容易重用、容易单元测试、调试和更改:

获取产品:

private IEnumerable<DisplayedProduct> FetchProductsToDisplay()
{
    ... // TODO: implement
}

创建一个属性来显示产品并获取显示的(可能编辑过的)产品:

private BindingList<DisplayedProduct> DisplayedProducts
{
    get => (BindingList<DisplayedProduct>)this.dataGridView1.DataSource;
    set => this.dataGridView1.DataSource = value;
}

并在表单加载时显示产品:

private void InitProductDisplay()
{
    this.DisplayedProducts = new BindingList<DisplayedProduct> 
        this.FetchProductsToDisplay.ToList());
}

private void OnFormLoading(object sender,...)
{
    this.InitProductDisplay();
}

这足以显示产品,并在需要时获取它们。操作员所做的所有更改(添加/删除行、编辑单元格)都会自动反映在绑定列表中。

private IEnumerable<DisplayedProduct> GetTopProducts()
{
    return this.DisplayedProduts.OrderByDescending(product => product.Quantity);
}

private string CreateTextTopProducts(int count)
{
    IEnumerable<DisplayedProduct> top3Products = GetTopProducts()
    .Select((product,index) => new
    {
        Index = index + 1,// select the properties that you want to show in the messagebox:
        Name = product.Name,...
    })
    .Take(count);

    // use a string builder to efficiently add formatted lines:
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.AppendLine("Top 3 items:");

    foreach (var product in top3Products)
    {
        stringBuilder.AppendFormat("{0}. {1}",product.Index,product.Name);
        stringBuilder.AppendLine();
    }
    return stringBuilder.ToString();
}

最后是展示top3产品的方法:

private void ShowTop3Products()
{
    string displayText = this.CreateTextTop3Products(3);
    MessageBox.Show(this,displayText,...);
}

private void button2_Click(object sender,EventArgs e)
{
    this.ShowTop3Products();
}

C#:GUI,用于显示来自Windows服务的实时消息

C#:GUI,用于显示来自Windows服务的实时消息

我编写了一个C# windows服务,可以将消息写入自定义EventLog或任意数量的文件.这些消息都标记有一些优先级(因此,例如,只有ERROR和WARNING存储在EventLog中,但如果需要,可以将更多内容存储到文件中).

我现在要做的是创建一个GUI,可以监听这些消息并实时显示它们.允许用户观看当前消息(无论其所需的优先级),而无需将所有内容存储到文件中.我假设这是一个单独的程序,在服务中有某种形式的钩子,但我不确定从哪里开始.

这是我的第一个真正的Windows服务,所以我似乎缺少一些关键字,以找出如何做到这一点…是否有任何代码示例,教程,参考,如何做这样的事情?

UPDATE
很多有用的答案,我喜欢它,有很多方法可以解决问题!我想我将实现一个基于WCF的自托管解决方案.我仍然非常关注细节,因为我正在尝试了解WCF(我相信它对我在其他项目中非常有用)…但到目前为止,我发现视频here是最多的有用的介绍方法.

解决方法

你可以做的是让windows服务有办法注册一个事件(你可以通过使用Windows Communication Foundation来实现).当您的错误出现时,它会触发该事件,并且会通知您的winforms应用程序.它被称为双工合同:

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/0eb69998-0388-4731-913e-fb205528d374/

http://msdn.microsoft.com/en-us/library/ms731184.aspx

实际上,真正酷的是你可以通过这种方式监听多个应用程序.因此,您可以在屏幕上显示它,并让另一个应用程序记录它等,而不需要两个外部应用程序了解彼此.

inno-setup – 如何在指定时间内显示消息框?

inno-setup – 如何在指定时间内显示消息框?

有没有办法在指定的时间内显示一个消息框(这意味着,当指定的时间过去时,消息框将自动关闭)?

解决方法

Windows API具有在指定时间内显示消息框的功能,但由于某种原因,该功能未记录,这意味着它没有得到官方支持,可能会有所变化.

该函数被称为MessageBoxTimeout,它甚至在user32.dll库中导出,让我觉得这个函数唯一缺少的是官方文档.但是谁知道……

以下脚本显示如何在显示向导表单之前显示消息框5秒.如果用户未单击“确定”按钮,也不手动关闭窗口,则在该5秒时间过后,消息框将自动关闭:

[Code]
#ifdef UNICODE
  #define AW "W"
#else
  #define AW "A"
#endif
const
  MB_TIMEDOUT = 32000;
  MB_ICONERROR = $10;
  MB_ICONQUESTION = $20;
  MB_ICONWARNING = $30;
  MB_ICONinformatION = $40;

function MessageBoxTimeout(hWnd: HWND; lpText: string; lpCaption: string;
  uType: UINT; wLanguageId: Word; dwMilliseconds: DWORD): Integer;
  external 'MessageBoxTimeout{#AW}@user32.dll stdcall';

procedure InitializeWizard;
begin
  MessageBoxTimeout(WizardForm.Handle,'This message will be automatically ' +
    'closed in 5 seconds!','Caption...',MB_OK or MB_ICONinformatION,5000);
end;

有关参数和结果值的更多信息,请参阅MessageBox函数帮助站点和一些描述MessageBoxTimeout函数本身的非官方文章,例如:

> Maurizio Pisano: MessageBoxTimeout API (CodeProject)
> Eddie Shipman: Undocumented MessageBoxTimeOut function (Embarcadero)

我们今天的关于如何在 linux 中显示来自 bash 脚本的 GUI 消息框?linux显示bash-4.1的分享已经告一段落,感谢您的关注,如果您想了解更多关于bash – 如何在一分钟后在linux中启动shell脚本?、C# 表单在消息框/新表单中显示来自数据库/图表的排名列表、C#:GUI,用于显示来自Windows服务的实时消息、inno-setup – 如何在指定时间内显示消息框?的相关信息,请在本站查询。

本文标签: