当前位置: 首页>>技术教程>>正文


如何在zenity中使用bash脚本中的图形小部件

, ,

Zenity是一个非常有用的实用程序,它使我们可以为Shell脚本创建图形用户界面。存在几个小部件,可以通过使用带有相应选项的程序来使用。这些小部件基于GTK工具包,并在标准输出或返回代码中返回用户交互的结果。

在本教程中,您将学习:

  • 一般的zenity选项有哪些
  • 什么是一些最有用的可用小部件以及如何使用它们

使用的软件要求和约定

软件要求和Linux命令行约定
类别 使用的要求,约定或软件版本
系统 Distribution-independent
软件 zenity实用程序
其他 熟悉shell(在本例中为bash)和诸如subshel​​l和退出代码之类的概念
约定 -要求linux命令可以直接以root用户身份或通过使用root特权以root特权执行sudo命令$-要求linux命令以普通非特权用户身份执行

安装

zenity该软件包包含在所有主要linux发行版的存储库中,如果您使用的是GNOME桌面环境。要安装它,我们可以使用我们最喜欢的分发程序包管理器,在Fedora,例如,我们可以使用dnf

$ sudo dnf install zenity


(adsbygoogle = window.adsbygoogle || [])。push({});


当使用基于Debian和基于debian的发行版(如Ubuntu)时,我们可以使用apt-get命令:

$ sudo apt-get install zenity

Zenity已包含在Archlinux中extra存储库,因此我们可以通过安装它pacman

$ sudo pacman -S zenity

通用选项

在我们开始看到由…提供的一些最有用的小部件之前zenity,我们应该提到一些可用的通用选项,这些选项可用于更改程序行为。

我们称它们为通用类,因为它们可以独立于所选小部件应用:--title--widow-icon--width--height--timeout

首先我们有--title选项:我们可以使用它为对话窗口指定标题。同样,--window-icon选项让我们指定一个图标,该图标将用作窗口的图标,并且在例如任务栏中可见。要在小部件中显示图标,我们可以使用--icon-name选项并提供允许的图标名称之一(这是完整清单)作为参数。例如,要使用错误,信息,问题或警告对话框中提供的库存图标,我们可以分别指定:dialog-errordialog-infodialog-question要么dialog-warning

--width--height选项非常容易解释:它们让我们定义了对话窗口的几何形状。

最后,通过使用--timeout选项,我们可以为对话设置超时(以秒为单位):在指定的时间量后,它将自动关闭。


(adsbygoogle = window.adsbygoogle || [])。push({});


可用的小部件

感谢zenity,我们可以使用几个小部件:每个小部件都有特定的用途。让我们来看一些。

日历小部件

日历小部件将显示日历,并允许用户通过选择月份,日期和年份来选择日期。所选值将在standard output。要启动小部件日历,我们要做的就是调用zenity,--calendar选项:

$ zenity --calendar

我们可以使用一系列选项来fine-tune小部件的行为,例如,通过使用--day--month--year并提供INT作为值,我们可以分别设置将在小部件中显示的默认日,月和年。要指定返回所选日期的特定格式,我们可以使用--date选项,并在strftime样式。

calendar-widget

日历小部件

条目小部件

当我们需要询问用户一些文本时,entry小部件非常有用。例如,我们需要要求用户输入名称;我们可以运行以下命令:

$ zenity --entry --title "Name request" --text "Please enter your name:"

(adsbygoogle = window.adsbygoogle || [])。push({});


在这里,我们使用了--title--entry-text用于分别自定义窗口小部件的标题和标签的选项。一旦运行上面的命令,该小部件将出现:

entry-widget

条目小部件

用户输入的文本将在标准输出中返回。

文件选择小部件

文件选择小部件使我们可以显示一个漂亮的图形界面,以使用户选择一个或多个文件。与前面的示例一样,我们可以使用一系列选项来修改对话框的行为和外观。最重要的一项是--filename可以用来设置默认情况下将选择的文件/目录。以下是它们提供的选项和功能的快速概述:

Zenity文件选择小部件选项
选项 功能
– 文件名 设置将在小部件中选择的默认目录/文件
– 多 启用一次选择多个文件的功能
–file-filter 指定文件名过滤器
– 目录 将选择限制为目录
– 救 在”save”模式下运行小部件。
–confirm-overwrite 覆盖现有文件时要求用户确认
– 分隔器 指定在选择多个文件时将用于分隔路径的分隔符

让我们来看一个小部件使用的例子。假设我们要让用户选择多个文件,并且我们想要用户的内容$HOME打开窗口小部件时要显示的目录。我们要做的就是运行以下命令:

$ zenity --file-selection --multiple --filename "${HOME}/"

您会注意到我们提供了一条尾随/到路径:以这种方式显示目录的内容,而不是目录本身。这是我们的小部件:

file-selection-widget

文件选择小部件

单击”ok”按钮后,所选文件的绝对路径将在标准输出中返回,由字符分隔,默认为|

/home/egdoc/Downloads/a.txt|/home/egdoc/Downloads/b.txt

我们可以轻松地更改分隔符,提供要用作–separator选项参数的字符。

如果我们打开对话save mode,系统将要求用户提供他要保存的文件的名称。如果文件存在并且我们提供了--confirm-overwrite选项,系统将提示他确认要覆盖它:

$ zenity --file-selection --save --confirm-overwrite --filename "${HOME}/"

所选路径将返回到标准输出,我们可以在脚本中自由使用它。

进度小部件

另一个有趣的小部件是进度:我们可以通过以下方式启动它:--progress选项。例如,我们可以使用它来显示长时间运行的操作的进度。以下是我们可以与小部件一起使用的一些最有用的选项:

选项 功能
– 百分比 设置进度条的初始百分比值
–auto-close 进度完成后自动关闭对话
–auto-kill 如果使用“取消”按钮关闭对话框,则终止父进程
–no-cancel 不显示取消按钮

这是一个示例,说明了如何在bash脚本



(adsbygoogle = window.adsbygoogle || [])。push({});


#!/bin/bash
#
# Dummy script to demonstrate the zenity progress widget!

(
  echo 25
  echo "# Setting up..."
  sleep 2

  echo 30
  echo "# Reading files..."
  sleep 2

  echo 70
  echo "# Creating content..."
  sleep 1

  echo 100
  echo "# Done!"
) | zenity --title "Progress bar example" --progress --auto-kill

上面的脚本实际上并没有执行任何操作,但是了解小部件的工作方式非常有用。该代码中有两点需要注意:首先,要执行的命令用括号括起来,因此在subshell:这是小部件正常工作所必需的;其次,当我们回显以数字开头的行时,这将被解释为进度条的百分比。

同样,当我们回显以#字符,它将用作要在小部件中显示的文本。这是正在运行的脚本的简短视频:

信息,警告和错误小部件

要显示信息,警告或错误消息,我们可以将zenity与--info--warning--error选项。在这种情况下,我们使用--text选项以指定消息。这是通知的示例:

$ zenity --info --width=400 --height=200 --text "This is a notification!"
notification-widget

通知小部件

使用警告小部件也一样简单:

$ zenity --warning --width=400 --height=200 --text "This is a warning!"
warning-widget

警告小部件

这是错误消息的示例:

$ zenity --error --width=400 --height=200 --text "This is an error!"
error-widget

错误小部件

问题小部件

要向用户提出问题并获得答案,我们可以使用question小部件,使用--question选项。我们使用--text选项,并分别使用定义’ok’和’cancel’按钮的标签--ok-label--cancel-label选项。这是一个例子:

$ zenity --question --text "Are you sure you want to quit?" --no-wrap --ok-label "Yes" --cancel-label "No"
question-widget

问题小部件

(adsbygoogle = window.adsbygoogle || [])。push({});


在这种情况下,我们还使用了--no-wrap选项,以避免在小部件中换行。用户选择的结果将不会显示在标准输出上。相反,该命令将设置其exit code因此,它将返回0如果用户单击’ok’按钮,并且1如果他单击了’cancel’或关闭了窗口(这似乎是counter-intuitive,但请记住退出代码为0表示命令已在shell中成功执行)。

密码小部件

这是我们希望用户输入密码或任何敏感信息时应使用的小部件:他输入的文本被项目符号遮盖:

password-widget

密码小部件

当用户输入的文本被屏蔽时,小部件返回的值将在标准输出上清晰可见。

颜色选择小部件

这是另一个不错的小部件。通过使用它,我们可以使用户从调色板中选择一种颜色。要运行它,我们将zenity与--color-selection选项。我们可以通过使用指定初始选择的颜色--color并提供颜色作为参数。这是一个例子:

color-widget-no-palette

颜色选择小部件

(可选)我们可以显示调色板,--show-palette选项:

$ zenity --color-selection --color red --show-palette
color-widget-palette

颜色选择小部件调色板

用户选择的颜色将返回rgb标准输出上的符号。例如,当选择红色时,将返回以下内容:

rgb(255,0,0)

列表小部件

我们要看的下一个小部件是列表小部件。有了它,就可以创建multi-column对话框,并且可以选择让用户通过复选框或单选按钮选择一个或多个选项。为了让zenity显示这种类型的对话,我们使用--list选择并定义列及其内容;如果我们忽略它们,该命令将失败:

$ zenity --list
No column titles specified for List dialog.

要定义列标题,我们使用--column选项并提供一个字符串作为参数。我们为要创建的每一列重复该命令:

$ zenity --list --column Selection --column Distribution

使用上面的命令,我们创建了两列,分别是”Selection”和”Distribution”标头。现在,我们将为用户提供一系列行,每个行代表一个Linux发行版。在每一行的第一列中,我们将放置一个复选框,以允许用户选择相应的条目:


(adsbygoogle = window.adsbygoogle || [])。push({});


$ zenity --list --column Selection --column Distribution FALSE Debian TRUE
Fedora -radiolist

我们在列定义之后提供的每个字符串都与列相关联,具体取决于它们的出现顺序。如您所见,我们创建了两行。在每一行的第一列中,我们提供了一个值:FALSE这样,在显示小部件时不会选择相应的复选框或单选按钮,并且TRUE将输入设置为默认标记。这是生成的小部件:

list-widget

列表小部件

当我们单击”ok”按钮并执行选择时,与行关联的值将在标准输出中报告。如果我们要让用户选择多行,可以使用--checklist选项:字符将用于分隔选定的值。

结论

在本教程中,我们了解了zenity,该实用程序可让我们在Shell脚本中使用图形对话。我们看到了可以与所有小部件一起使用的通用选项,例如--width--height,我们学会了使用一些可以通过程序生成的最有用的小部件。要了解更多有关zenity您可以查阅其手册!

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/10558.html,未经允许,请勿转载。