Zenity是一个开源和跨平台的应用程序,它在命令行中显示GTK +对话框并使用shell脚本。
GNU Linux的操作系统建立在非常强大的内核称为Linux。 Linux以其命令行操作而闻名。 随着Linux在日常和桌面计算中的发明,linux保持不再偏向命令行,它同样是图形化和开发图形应用程序保持不再是一个困难的任务。如下图所示about对话框的实现:
Zenity显示图形对话框
zenity是一个开源和显示GTK +对话框的命令行和使用shell脚本一个跨平台的应用程序。 它允许在图形框中向/从shell请求和呈现信息。 该应用程序允许您在命令行中创建图形对话框,并使用户和shell之间的交互非常容易。
Zentity默认安装或者在今天大多数的标准Linux发行库可用。 您可以通过执行以下命令检查是否安装到您的机器上。
zenity --version
如果它没有安装,可以使用如下命令进行安装。
sudo apt-get install zenity
通过about对话框可以看出Zenity的使用非常容易,接下来我们对它的各种可能状态进行详细地介绍。下表列出了可以创建的对话框的主要类型。
类型 | 用于创建类型的选项 | 含义 |
---|---|---|
列表对话框 | --list | 使用 --list 选项创建一个列表对话框,Zenity 在标准输出返回选中行的第一列项目。 |
--list --checklist | 如果使用 --list --checklist选项,每一行必须以“TRUE”或“FALSE”开始,多选列表 | |
--list --radiolist | 如果使用 --list --radiolist选项,每一行必须以“TRUE”或“FALSE”开始,单选列表 | |
文件选择框 | --file-selection | 创建一个文件选择对话框,Zenity 在标准输出返回选中的文件或目录 |
消息对话框 | --info | 信息对话框,同时显示一个OK按钮 |
--warning | 警告对话框,同时显示一个OK按钮 | |
--error | 错误对话框,同时显示一个OK按钮 | |
--question | 问题对话框,同时显示一个YES/NO按钮 | |
范围对话框 | --sclae | 创建一个带滚动条的范围对话框 |
进度条对话框 | --progress | 创建一个进度条对话框 |
文本输入对话框 | --entry | 创建一个文本输入对话框,将文本框的内容返回到标准输出 |
文本信息框 | --text-info | 创建一个文本信息框,类似于条款readme |
当您写了 Zenity 命令,确保每个文本参数用双引号“ ”括起来。例如,使用:zenity --calendar --title="假日计划"。如果您没有使用引号,可能会产生不可预料的结果。注意:宽度、高度、超时要用单引号' '括起来。
控件返回值=$(zenity --控件)。
echo $?返回的是控件成功与否
Zenity退出代码:
退出代码 | 描述 |
---|---|
0 | 按下确定或关闭 |
1 | 按下取消或者窗口的关闭按钮 |
-1 | 发生了意外的错误 |
5 | 对话框因超时关闭 |
Zenity常规选项:
常规选项 | 描述 |
---|---|
--title=标题 | 指定对话框的标题 |
--window-icon=图标路径 | 指定显示在对话窗口框上的图标 |
--width=宽度 | 指定对话框的宽度 |
--height=高度 | 指定对话框的高度 |
--timeout=超时 | 指定超出时间(秒)后对话框自动关闭 |
一些的zenity的基本对话框,它可以直接在命令行调用的。
1.快速日历对话框怎么样?
zenity --calendar
Zenity日历对话框
2.列表对话框
使用 --list 选项创建一个列表对话框,Zenity 在标准输出返回选中行的第一列项目。对话框里的数据必须指定行和列,可以由标准输入提供,每一项都必须由换行符分隔。如果在--list下使用--checklist 或 --radiolist 选项,每一行必须以“TRUE”或“FALSE”开始,表示选中状态,返回选中行的第二列项目。
列表框支持以下选项:
--column=“列标题”:指定列表对话框显示的列标题。您必须为每个要显示的列,用 --column 选项指定一个列标题。
--checklist:指定列表框的第一列包含一个复选框。
--radiolist:指定列表框的第一列包含单选按钮。
--editable:指定显示的项可以编辑。
--separator=“分隔符”:指定列表框返回选中项时使用的字符。
--print-column=列:指定选择列上显示什么,默认是“1”,“ALL”用于在列表上显示所有列(要用双引号“”)。
下面的例子显示脚本如何创建一个列表对话框:
#!/bin/sh
zenity --list \
--title="Choose the Bugs You Wish to View" \
--column="Bug Number" --column="Serverity" --column="Description" \
992383 Normal "多选时 GtkTreeView 崩溃" \
293823 High "GNOME 字典不能使用代理" \
393823 Critical "菜单编辑器在 GNOME 2.0 中不能运行"
列表对话框实例:
3.文件选择对话框
使用 --file-selection 选项创建一个文件选择对话框。Zenity 在标准输出返回选中的文件或目录。默认的文件选择对话框模式是打开对话框。
文件选择对话框支持以下选项:
--filename=文件名:指定文件选择对话框在第一次显示时,选定的文件或文件夹。
--multiple:允许在文件选择对话框里选中多个文件名。
--directory:在文件选择对话框里只允许选中文件夹。
--save:设置文件选择对话框模式为保存对话框。
--separator=分隔符:指定用于分隔返回的文件名列表的字符。
下面的脚本示范了如何创建一个文件选择对话框:
#!/bin/sh
FILE=`zenity --file-selection --title="Select a File"`
case $? in
0) echo "\"$FILE\" 被选中。";;
1) echo "没有选择文件。";;
-1) echo "发生意外错误。";;
esac
文本选择对话框实例:
4.消息对话框
对于每一种类型,使用 --text 选项来指定在对话框里显示的文本。
4.1.信息对话框
使用 --info 选项。
#!/bin/bash
zenity --info --text="合并完成。更新了 3 / 10 个文件。"
4.2.警告对话框
使用--warning选项
#!/bin/bash
zenity --warning --text="拔下电源线,避免触电。"
4.3.错误对话框
使用--error选项
#!/bin/bash
zenity --error --text="找不到 /var/log/syslog。"
4.4.问题对话框
使用--question选项
#!/bin/bash
zenity --question --text="您确认要继续吗?"
5.范围对话框 (zenity --scale)
使用 --scale 选项创建一个范围对话框。
范围对话框支持以下选项:
--text=文本:设置对话框文本。(默认:调整范围值)
--value=值:设置初始值。(默认:0)您必须在最小值和最大值之间指定一个值。
--min-value=值:设置最小值。(默认:0)
--max-value=值:设置最大值。(默认:100)
--step=值:设置步长。(默认:1)
--print-partial:将值打印为标准输出,无论值何时变化。
--hide-value:隐藏对话框中的值。
下面的脚本示范了如何创建一个范围对话框:
#!/bin/sh
VALUE=`zenity --scale --text="选择窗口透明度。" --value=50`
case $? in
0) echo "您选中了 $VALUE%。";;
1) echo "未选中值。";;
-1) echo "发生意外错误。";;
esac
6.进度对话框 (zenity --progress)
使用 --progress 选项创建一个进度对话框。Zenity 从标准输入一行行读取数据。如果某一行以 # 开头,进度框里的文本会被那一行上的文本替换,如果某一行只是一个数字,数字会被换成进度条的百分比。
进度框支持以下选项:
--text=文本:指定显示在进度框里的文本。
--percentage=百分比:指定进度框开始时的百分比设定。
--auto-close:当达到 100% 时自动关闭对话框。
--pulsate:指定进度条跳动,直到从标准输入读到一个 EOF 文件结束符。
下面的脚本示范了如何创建一个进度对话框:
#!/bin/sh
(
echo "10" ; sleep 1
echo "# 更新邮件日志" ; sleep 1
echo "20" ; sleep 1
echo "# 复位定时计划任务" ; sleep 1
echo "50" ; sleep 1
echo "该行会被忽略" ; sleep 1
echo "75" ; sleep 1
echo "# 重启系统" ; sleep 1
echo "100" ; sleep 1
) |
zenity --progress \
--title="更新系统日志" \
--text="扫描邮件日志..." \
--percentage=0
if [ "$?" = -1 ] ; then
zenity --error --text="更新被取消。"
fi
7.文本输入对话框 (zenity --entry)
使用 --entry 选项创建一个文本输入对话框。Zenity 将文本框的内容返回到标准输出。
文本输入框支持以下选项:
--text=文本:指定在文本输入框中显示的文本。
--entry-text=文本:指定在文本框的文本域里显示的文本。
--hide-text:隐藏文本框中输入的字段内容。
下面的脚本示范了如何创建一个文本输入对话框:
#!/bin/sh
if zenity --entry \
--title="添加新配置" \
--text="输入新配置的名称:" \
--entry-text "新配置"
then
echo $?
else
echo "未输入名称"
fi
array=(a b c d)表示数组,${array[@]}表示a b c d,可以显示一个带列表的entry对话框
#!/bin/sh
array=(a b c d)
zenity --entry ${array[@]}
8.文本信息框 (zenity --text-info)
使用 --text-info 选项来创建一个文本信息框(老版本只支持前两个选项)。
文本信息框支持以下选项:
--filename=文件名:指定一个加载到文本信息框里的文件。
--editable:显示的文本允许编辑,当对话框关闭后,编辑后的文本显示到显示器上。
--font=字体:指定文本字体。
--checkbox=文本:启用复选框,如“我已阅读并接受该条款。”
下面的脚本示范了如何创建一个文本信息对话框:
#!/bin/sh
# You must place file "COPYING" in same folder of this script.
FILE=`dirname $0`/COPYING
zenity --text-info \
--title="License" \
--filename=$FILE \
--checkbox="I read and accept the terms."
case $? in
0) echo "Start installation!";;
1) echo "Stop installation!";;
-1) echo "An unexpected error has occurred.";;
esac
https://www.howtoing.com/zenity-creates-graphical-gtk-dialog-boxes-in-command-line-and-shell-scripts/
https://help.gnome.org/users/zenity/