如何在 Linux 和 Unix 中使用 Zenity 在 Bash 脚本中创建 GUI 对话框

到那个时刻 bash 脚本,所有的脚本主要集中在命令行操作上。 无论您需要用户输入还是显示一些消息,一切都通过终端完成。 大多数使用 Bash 编写脚本的人都不知道有一组可用的 GUI 工具。 在本文中,我们将看到一个这样的工具,称为 禅度 – 一个简单的程序,使您能够在命令行和 shell 脚本中创建图形 (GTK+) 对话框。

什么是禅意?

Zenity 是 gdialog 的重写,GNOME 的对话框端口,它允许您为不同的操作创建一组小部件,用户可以在其中以图形方式与脚本交互。 这些小部件基于 GTK 工具包。

Zenity 是一个开源程序,使用 C 编程语言。 它支持 Linux、BSD 和 Windows。

事不宜迟,让我们看看如何使用 Zenity 从命令行和 shell 脚本显示图形 GTK+ 对话框。

如何在 Linux 中安装 Zenity

首先,通过运行以下命令检查 zenity 是否已安装并可使用:

$ which zenity
/usr/bin/zenity
$ zenity --version
3.32.0
$ zenity --about
关于 Zenity

如果您的发行版中未安装 zenity,请根据您的发行版运行以下命令来安装它。

高山Linux:

$ sudo apk add zenity

Arch Linux:

$ sudo pacman -S zenity

Fedora、RHEL、CentOS、Alma Linux 和 Rocky Linux:

$ sudo dnf install zenity

Debian、Ubuntu、Linux Mint、流行操作系统:

$ sudo apt install zenity

openSUSE:

$ sudo zypper install zenity

1. Zenity 帮助和常用选项

对于每个小部件,都有一个关联的帮助选项,您可以通过它获得一组支持的选项。

运行以下命令以访问帮助部分。

$ zenity --help

有一些常用选项可以与任何小部件一起使用。 这些不是强制性选项,但如果使用将利用您来更改小部件的行为。

要获取常用选项列表,请运行以下命令。

$ zenity --help-general
Zenity 常规选项

我们将在接下来的部分中了解这些选项是如何工作的。

2.消息对话框

消息对话框将显示错误、警告、信息和问题对话框。 根据情况,您必须在脚本中使用适当的对话框。

2.1。 错误对话框

要访问错误对话框的支持选项列表,请运行以下命令:

$ zenity --help-error

要在脚本中显示错误对话框,请使用以下命令。 在这里, --error flag 将创建错误对话框和 --text flag 将打印文本消息。 您可以从图像中看到与对话框相关的错误图标。

zenity --error 
       --title "Error Message" 
       --width 500 
       --height 100 
       --text "Permission denied. Run with sudo or as root user."
错误对话框 错误对话框

从上图中也可以看出,一些常用的选项如–width、–height 用于控制对话框的几何形状。 标志 –title 用于打印带有标题的对话框栏。

2.2. 警告对话框

要访问警告对话框的支持选项列表,请运行以下命令:

$ zenity --help-warning

采用 --warning 脚本中的标志以显示警告框和 --text 标志以显示警告消息。

zenity --warning 
       --title "Warning Message" 
       --width 500 
       --height 100 
       --text "Disk space exceeded the threshold limit. Check ASAP."
警告对话框 警告对话框

2.3. 信息对话框

要访问信息对话框的支持选项列表,请运行以下命令:

$ zenity --help-info

采用 --info 在脚本中标记以显示信息框和 --text 标志以显示信息消息。

zenity --info 
       --title "Info Message" 
       --width 500 
       --height 100 
       --text "Installation completed successfully."
信息对话框 信息对话框

2.4. 问题对话框

要访问问题对话框的支持选项列表,请运行以下命令:

$ zenity --help-question

问题对话框将提示一条消息以及 是的 或者 选项。 如果按 “是的”,返回码将是 “零” 并且对于 “不” 返回码将是 “一”. 您必须使用退出代码在脚本中编写更多逻辑。

zenity --info 
       --title "Info Message" 
       --width 500 
       --height 100 
       --text "Installation completed successfully."
问题对话框 问题对话框

3.文本输入对话框

要访问文本输入对话框的支持选项列表,请运行以下命令:

$ zenity --help-entry

文本输入对话框提示用户输入。 国旗 --entry 用于创建条目对话框。 要在对话框中显示一些文本,请使用 --text 旗帜。 一旦您按确定,在文本框中输入的值将打印在终端中。 如果您希望像下面那样进一步处理来自文本框的输入,则必须将输出存储到变量中。

$ USR=$(zenity --entry 
       --width 500 
       --title "check user" 
       --text "Enter the user name"); echo $USR
文本输入对话框 文本输入对话框

如果您不希望在键入时使输入文本可见,请使用 --hide-text 旗帜。

$ USR=$(zenity --entry 
       --width 500 
       --title "check user" 
       --text "Enter the user name" 
       --hide-text); echo $USR
隐藏输入文本 隐藏输入文本

您还可以使用 --entry-text 旗帜。 您必须删除该值并提供您的输入,否则现有值将被视为默认值。

$ USR=$(zenity --entry 
       --width 500 
       --title "check user" 
       --text "Enter the user name" 
       --entry-text $USER); echo $USR
默认条目文本值 默认条目文本值

4.密码对话框

要访问密码对话框支持的选项列表,请运行以下命令:

$ zenity --help-password

密码对话框将接受用户名和密码,使用 --username--password 旗帜。 输出将显示为(用户名 | 密码)。 您必须将命令的输出分配给变量并提取用户名和密码以进行进一步处理。

$ zenity --password --username
密码对话框 密码对话框

5.文本信息对话框

要访问文本信息对话框的支持选项列表,请运行以下命令:

$ zenity --help-text-info

文本信息对话框将打印文件中的任何文本或在对话框中打开 URL。 为了 example读取文件并显示文本使用标志 --filename. 在下面 example,我正在阅读 /etc/hosts 文件。

zenity --text-info 
--title "Hostname Information"
--filename "/etc/hosts"
从文件中读取 从文件中读取

--checkbox flag 可用于获取用户的输入。 一个好的 example 将是“接受许可协议”。 除非您选中该复选框,否则确定按钮将被禁用。

zenity --text-info 
--title "Hostname Information"
--filename "/etc/hosts"
--checkbox "This is a checkbox"
复选框使用 复选框使用

6.日历对话框

要访问日历对话框的支持选项列表,请运行以下命令:

$ zenity --help-calendar

日历对话框将显示日历并允许您选择日期。 您必须将输出存储到变量中,否则所选日期将打印在终端中。

zenity --calendar 
       --title="Select a Date" 
       --text="Select Date to pull the employee record."
日历对话框 日历对话框

默认情况下,选择今天的日期,但我们也可以使用 --day, --month, 和 --year 标志。

zenity --calendar 
       --title="Select a Date" 
       --text="Select Date to pull the employee record." 
       --year 2015 
       --month 7 
       --day 15
自定义日期、月份、年份 自定义日期、月份、年份

默认输出格式为 DDMMYY. 也可以使用 --date-format 旗帜。

zenity --calendar 
       --title="Select a Date" 
       --text="Select Date to pull the employee record." 
       --date-format %m-%d-%y
自定义输出格式 自定义输出格式

7.颜色选择对话框

要访问颜色选择对话框的支持选项列表,请运行以下命令:

$ zenity --help-color-selection

颜色选择对话框将显示一个调色板并允许您选择一种颜色,输出​​将为 RGB 值。 采用 --color-selection 旗连同 --show-palette 旗帜。

$ COLOR_RGB=$(zenity --color-selection --show-palette)
$ echo $COLOR_RGB
颜色选择对话框 颜色选择对话框

8.文件选择对话框

要访问文件选择对话框的支持选项列表,请运行以下命令:

$ zenity --help-file-selection

文件选择对话框将允许您选择文件或目录,并且路径显示为输出。 国旗 --file-selection 应该使用。 在文件选择对话框中可以使用几个标志。

  • --filename => 默认文件/目录的路径
  • --directory => 只选择目录
  • --multiple => 允许选择多个文件名
  • --save => 设置为保存模式
zenity --file-selection 
       --title "Select Files" 
       --filename "/home/${USER}/" 
       --multiple
选择文件 选择文件

在多选的情况下,文件路径将使用 "|" 象征。

输出分隔符 输出分隔符

可以使用 --separator 旗帜。 在下面 example, 我在用 冒号 (:) 作为分隔符。

zenity --file-selection 
       --title "Select Files" 
       --filename "/home/${USER}/" 
       --multiple 
       --separator :
自定义分隔符 自定义分隔符

9.表格对话框

要访问表单对话框的支持选项列表,请运行以下命令:

$ zenity --help-forms

表单对话框允许您创建表单。 一个好的 example 是新用户注册表单。 采用 --forms 标志创建表单对话框。 还有一些额外的标志可以与 --forms 旗帜。

  • --add-entry => 在表单对话框中添加一个新条目,供用户输入。
  • --text => 要在对话框中显示的文本。
  • --add-password => 接受密码但不会在屏幕上显示该值。
  • --calendar => 打开日历并从中选择一个日期。

下面是一个简单的 example 使用表单对话框的用户注册表单。

zenity --forms 
       --text "Welcome to signup wizard" 
       --add-entry "Enter the first name" 
       --add-entry "Enter the last name" 
       --add-entry "Enter login name" 
       --add-password "Enter password"
表单对话框 - 用户注册 表单对话框 – 用户注册

输入值的默认分隔符是 "|" 象征。 您还可以使用自定义分隔符 --separator 旗帜。

默认分隔符 默认分隔符

10.进度对话框

要访问进度条对话框支持的选项列表,请运行以下命令:

$ zenity --help-progress

采用 --progress 标志以创建进度条。 为了创建进度条,您必须了解它是如何工作的。 应从您这边提供两个输入。

  1. 仅包含数字的行 echo 命令将被视为进度的百分比。
  2. 以 开头的行 # 中的符号 echo 命令将作为进度消息打印。
(
  echo 10
  echo "# Updating repository Index"
  sleep 5

  echo 15
  echo "# Reading input files"
  sleep 5

  echo 70
  echo "# Installing packages..."
  sleep 5

  echo 100
  echo "# Package Installation completed!"
) | zenity --title "Package Installation Progress Bar" --progress --auto-close
进度条对话框 进度条对话框

进度条完成后,您可以自动制作一个对话框 close 使用 –auto-close 旗帜。

11. 列表对话框

要访问列表对话框的支持选项列表,请运行以下命令:

$ zenity --help-list

列表对话框允许您创建行和列的列表。 采用 --list 标志创建列表对话框和 --column 添加列的标志。

$ zenity --list 
      --column "Player" 
      --column "Club" 
      --column "Country" 
      Messi PSG Argentina 
      Neymar PSG Brazil 
      Ronaldo Manu Portugal
列表框 列表框

看看上面的 example. 使用 --column 标志,我创建了三列。 创建列后,您可以在下一行中输入值,这些值将显示为每一行,就像我在上图中所做的那样。

在第一列中,可以创建复选框或单选按钮。 要创建单选按钮,请使用 --radiolist 标记并创建一个复选框,使用 --checklist 旗帜。 创建电台列表时,必须添加 真的 或者 错误的 关键字作为行的第一个值。 True 将选择单选列表或复选框,而 false 将不选中该框。

zenity --list 
      --checklist 
      --column "checkbox" 
      --column "Player" 
      --column "Club" 
      --column "Country" 
      FALSE Messi PSG Argentina 
      FALSE Neymar PSG Brazil 
      FALSE Ronaldo Manu Portugal
清单 清单

当您选择行并单击确定时,该值将打印到终端(|) 作为分隔符。 默认情况下,只有第一列打印到终端。 要打印整行,请通过 --print-column ALL.

结论

我们已经到了文章的结尾。 我已经简要解释了 zenity 是什么以及可以使用的不同小部件。 您可能并不总是需要 GUI 实用程序。 但是,当您需要图形 GTK+ 小部件时 bash 脚本,Zenity 将在其他 GUI 工具中派上用场。

资源:

Bash 脚本指南:

  • Bash 脚本 – 案例陈述
  • Bash 脚本 – 条件语句
  • Bash 脚本 – 字符串操作
  • Bash 脚本 – Printf 命令用示例解释
  • Bash 脚本——用示例解释索引数组
  • Bash 脚本——用示例解释的关联数组
  • Bash 脚本——用例子解释 For 循环
  • Bash 脚本 – While 和 until 循环用示例解释
  • 用示例解释 Bash 重定向
  • Bash 脚本——用例子解释的变量
  • Bash 脚本——用例子解释的函数
  • 用 Linux 中的示例解释 Bash Echo 命令
  • Bash Heredoc 初学者教程