Zenity - 在Shell下迈向图形化的GUI工具

Zenity是一个开源和跨平台的应用程序,它在命令行中显示GTK +对话框并使用shell脚本。

GNU Linux的操作系统建立在非常强大的内核称为Linux。 Linux以其命令行操作而闻名。 随着Linux在日常和桌面计算中的发明,linux保持不再偏向命令行,它同样是图形化和开发图形应用程序保持不再是一个困难的任务。如下图所示about对话框的实现:

Zenity - 在Shell下迈向图形化的GUI工具_第1张图片

                                                                                        Zenity显示图形对话框

Zenity是什么?

        zenity是一个开源和显示GTK +对话框的命令行和使用shell脚本一个跨平台的应用程序。 它允许在图形框中向/从shell请求和呈现信息。 该应用程序允许您在命令行中创建图形对话框,并使用户和shell之间的交互非常容易。

Zenity的特性

  1. 轻松创建GUI
  2. 使用shell脚本可以与GUI用户进行交互

在Linux中安装Zenity

Zentity默认安装或者在今天大多数的标准Linux发行库可用。 您可以通过执行以下命令检查是否安装到您的机器上。

zenity --version

如果它没有安装,可以使用如下命令进行安装。

sudo apt-get install zenity

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 命令,确保每个文本参数用双引号“ ”括起来。例如,使用:zenity --calendar --title="假日计划"。如果您没有使用引号,可能会产生不可预料的结果。注意:宽度、高度、超时要用单引号' '括起来

      控件返回值=$(zenity --控件)。

      echo $?返回的是控件成功与否

Zenity退出代码:

退出代码 描述
0 按下确定或关闭
1 按下取消或者窗口的关闭按钮
-1 发生了意外的错误
5

对话框因超时关闭

Zenity常规选项:

常规选项 描述
--title=标题 指定对话框的标题
--window-icon=图标路径

指定显示在对话窗口框上的图标

--width=宽度 指定对话框的宽度
--height=高度 指定对话框的高度
--timeout=超时 指定超出时间(秒)后对话框自动关闭

Zenity基本对话框 

一些的zenity的基本对话框,它可以直接在命令行调用的。 

1.快速日历对话框怎么样?

zenity --calendar

Zenity - 在Shell下迈向图形化的GUI工具_第2张图片

                                                                                      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 中不能运行"

列表对话框实例:

Zenity - 在Shell下迈向图形化的GUI工具_第3张图片

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

文本选择对话框实例:

Zenity - 在Shell下迈向图形化的GUI工具_第4张图片

4.消息对话框   
        对于每一种类型,使用 --text 选项来指定在对话框里显示的文本。
        4.1.信息对话框
        使用 --info 选项。

#!/bin/bash
zenity --info --text="合并完成。更新了 3 / 10 个文件。"

Zenity - 在Shell下迈向图形化的GUI工具_第5张图片

4.2.警告对话框

使用--warning选项

#!/bin/bash
zenity --warning --text="拔下电源线,避免触电。"

Zenity - 在Shell下迈向图形化的GUI工具_第6张图片

4.3.错误对话框

使用--error选项

#!/bin/bash
zenity --error --text="找不到 /var/log/syslog。"

Zenity - 在Shell下迈向图形化的GUI工具_第7张图片

4.4.问题对话框

使用--question选项

#!/bin/bash
zenity --question --text="您确认要继续吗?"

Zenity - 在Shell下迈向图形化的GUI工具_第8张图片

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

Zenity - 在Shell下迈向图形化的GUI工具_第9张图片

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

Zenity - 在Shell下迈向图形化的GUI工具_第10张图片

7.文本输入对话框  (zenity --entry)
        使用 --entry 选项创建一个文本输入对话框。Zenity 将文本框的内容返回到标准输出。
        文本输入框支持以下选项:
        --text=文本:指定在文本输入框中显示的文本。
        --entry-text=文本:指定在文本框的文本域里显示的文本。
        --hide-text:隐藏文本框中输入的字段内容。
        下面的脚本示范了如何创建一个文本输入对话框:

#!/bin/sh
if zenity --entry \
--title="添加新配置" \
--text="输入新配置的名称:" \
--entry-text "新配置"
then 
  echo $?
else
  echo "未输入名称"
fi

Zenity - 在Shell下迈向图形化的GUI工具_第11张图片

array=(a b c d)表示数组,${array[@]}表示a b c d,可以显示一个带列表的entry对话框

#!/bin/sh
array=(a b c d)
zenity --entry ${array[@]}

Zenity - 在Shell下迈向图形化的GUI工具_第12张图片

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

Zenity - 在Shell下迈向图形化的GUI工具_第13张图片

参考:

https://www.howtoing.com/zenity-creates-graphical-gtk-dialog-boxes-in-command-line-and-shell-scripts/

https://help.gnome.org/users/zenity/

你可能感兴趣的:(Zenity,shell,linux命令)