Zenity是一个非常有用的实用程序,它使我们可以为Shell脚本创建图形用户界面。存在几个小部件,可以通过使用带有相应选项的程序来使用。这些小部件基于GTK
工具包,并在标准输出或返回代码中返回用户交互的结果。
在本教程中,您将学习:
- 一般的zenity选项有哪些
- 什么是一些最有用的可用小部件以及如何使用它们
使用的软件要求和约定
类别 | 使用的要求,约定或软件版本 |
---|---|
系统 | Distribution-independent |
软件 | zenity实用程序 |
其他 | 熟悉shell(在本例中为bash)和诸如subshell和退出代码之类的概念 |
约定 | #-要求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-error
,dialog-info
,dialog-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
样式。
条目小部件
当我们需要询问用户一些文本时,entry小部件非常有用。例如,我们需要要求用户输入名称;我们可以运行以下命令:
$ zenity --entry --title "Name request" --text "Please enter your name:"
(adsbygoogle = window.adsbygoogle || [])。push({});
在这里,我们使用了--title
和--entry-text
用于分别自定义窗口小部件的标题和标签的选项。一旦运行上面的命令,该小部件将出现:
用户输入的文本将在标准输出中返回。
文件选择小部件
文件选择小部件使我们可以显示一个漂亮的图形界面,以使用户选择一个或多个文件。与前面的示例一样,我们可以使用一系列选项来修改对话框的行为和外观。最重要的一项是--filename
可以用来设置默认情况下将选择的文件/目录。以下是它们提供的选项和功能的快速概述:
选项 | 功能 |
---|---|
– 文件名 | 设置将在小部件中选择的默认目录/文件 |
– 多 | 启用一次选择多个文件的功能 |
–file-filter | 指定文件名过滤器 |
– 目录 | 将选择限制为目录 |
– 救 | 在”save”模式下运行小部件。 |
–confirm-overwrite | 覆盖现有文件时要求用户确认 |
– 分隔器 | 指定在选择多个文件时将用于分隔路径的分隔符 |
让我们来看一个小部件使用的例子。假设我们要让用户选择多个文件,并且我们想要用户的内容$HOME
打开窗口小部件时要显示的目录。我们要做的就是运行以下命令:
$ zenity --file-selection --multiple --filename "${HOME}/"
您会注意到我们提供了一条尾随/
到路径:以这种方式显示目录的内容,而不是目录本身。这是我们的小部件:
单击”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!"
使用警告小部件也一样简单:
$ zenity --warning --width=400 --height=200 --text "This is a warning!"
这是错误消息的示例:
$ zenity --error --width=400 --height=200 --text "This is an error!"
问题小部件
要向用户提出问题并获得答案,我们可以使用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"
(adsbygoogle = window.adsbygoogle || [])。push({});
在这种情况下,我们还使用了--no-wrap
选项,以避免在小部件中换行。用户选择的结果将不会显示在标准输出上。相反,该命令将设置其exit code
因此,它将返回0
如果用户单击’ok’按钮,并且1
如果他单击了’cancel’或关闭了窗口(这似乎是counter-intuitive,但请记住退出代码为0表示命令已在shell中成功执行)。
密码小部件
这是我们希望用户输入密码或任何敏感信息时应使用的小部件:他输入的文本被项目符号遮盖:
当用户输入的文本被屏蔽时,小部件返回的值将在标准输出上清晰可见。
颜色选择小部件
这是另一个不错的小部件。通过使用它,我们可以使用户从调色板中选择一种颜色。要运行它,我们将zenity与--color-selection
选项。我们可以通过使用指定初始选择的颜色--color
并提供颜色作为参数。这是一个例子:
(可选)我们可以显示调色板,--show-palette
选项:
$ zenity --color-selection --color red --show-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
将输入设置为默认标记。这是生成的小部件:
当我们单击”ok”按钮并执行选择时,与行关联的值将在标准输出中报告。如果我们要让用户选择多行,可以使用--checklist
选项:字符将用于分隔选定的值。
结论
在本教程中,我们了解了zenity
,该实用程序可让我们在Shell脚本中使用图形对话。我们看到了可以与所有小部件一起使用的通用选项,例如--width
和--height
,我们学会了使用一些可以通过程序生成的最有用的小部件。要了解更多有关zenity
您可以查阅其手册!