# Zenity 手册

Zenity 桌面程序手册 V2.0
2003
2004
Sun Microsystems, Inc.
2010
TeliuTe (teliute@163.com)
Sun Microsystems, Inc.

对于本文档的复制、分发和／或修改必须遵循自由软件基金会 (Free Software Foundation) 发布的 GNU 自由文档许可证 (GFDL) 版本 1.1 或更高版本，该许可证没有固定的部分、没有封面和背页文本。您可以在此链接上或在随本手册一起分发的 COPYING-DOCS 文件中找到 GFDL 的副本。

本手册是在 GFDL 许可之下分发的 GNOME 手册集合的一部分。如果想要单独分发此手册，可以在手册中添加该许可证的一份副本然后分发，如该许可证的第 6 部分所述。

各个公司使用的许多用于区别它们产品和服务的名称都声明为商标。在所有的 GNOME 文档以及 GNOME 文档项目的成员中，这些名称都是以全大写字母或首字母大写显示，从而表明它们是商标。

本文档以及文档的修改版本都是在遵循 GNU 自由文档许可证的条款下提供，这表示具有以下含义：

1. 文档按“原样”提供，不提供任何明示或暗示的保证，包括但不限于：文档或文档的修改版本没有适销性方面的缺陷、适合特定目的的适用性，以及没有侵权行为。您将自行承担本文档以及文档修改版本的质量、准确性以及性能方面的风险。如果任何文档或文档修改版本存在缺陷，您(而不是最初的编写者、作者或撰写人)将承担所有必需的服务、维修或更正的费用。此免责声明是本许可证的重要组成部分。如果不接受此免责声明，那么您就没有权利使用任何文档或文档的修改版本；并且

2. 无论在任何情况以及在任何法律理论下，本文档或文档修改版本的作者、最初的编写者、任何撰写人或任何分发者，或者任意这些方的任何提供者都不对任何人由于使用本文档或文档修改版本引起或带来的任何直接的、间接的、特殊的、偶然的或继发的损失承担任何民事(包括疏忽)、合同或其它方面的责任，这些损失包括但不限于信誉损失、工作停止、计算机失败或故障，或任何以及所有其它损失或由此引发的或与之相关的损失，即使这些方已被告知存在出现此类损失的可能性时也是如此。

Sun
Java 桌面系统文档小组
Sun Microsystems, Inc.
Glynn
Foster
GNOME 文档项目
Nicholas
Curran
GNOME 文档项目
Zenity 桌面程序手册 V2.0
2004年8月

Sun Java 桌面系统文档小组

Sun Microsystems, Inc.

Zenity 手册 V1.0
2003年1月

Glynn Foster

GNOME 文档项目

本手册讲述的是 Zenity 2.6.0 版。

## 反馈

要发送反馈信息，请参照 GNOME 反馈页 上的指导。

Zenity 是 gdialog 的重写，dialog 的 GNOME 移植，可以用命令或 shell 脚本显示对话框。

## 介绍

Zenity 可以创建下列类型的简单对话框：

- 日历

- 文件选择框

- 列表框

- 提示图标

- 消息框

  - 错误框

  - 信息框

  - 询问框

  - 警告框

- 进度框

- 文本框

- 文本信息框

## 用法

在您写脚本时，可以使用Zenity 创建简单的交互式对话框，例如：

- 您可以创建从用户那儿获得信息的对话框。例如，您可以提示用户从日历对话框中选择日期，或者从文件选择框里选择一个文件。

- 您可以创建向用户提供信息的对话框。例如，您可以用进度条来显示一个操作的当前运行状态，或者用一个警告框提醒用户。

当用户关闭了对话框，Zenity 将输出对话框操作的文本到显示器。

当您写了 Zenity 命令，确保每个参数用双引号括起来。

例如，使用 :

    zenity --calendar --title="假期安排"

不要用:

    zenity --calendar --title=假期安排

如果您没有使用双引号，可能会产生不可预料的结果。

### 访问键

访问键允许您用键盘来执行一个操作，而不是用鼠标点击菜单命令或对话框按钮。每个访问键有一个标识符，是一个在菜单或对话框选项上的带下划线的字母。

一些 Zenity 对话框支持使用访问键，要指定一个字符用于访问键，在对话框的文本字符前面加一个下划线，下面的例子是如何让字母“C”作为访问键：

    "选择(_C)".

### 退出代码

Zenity 返回以下退出代码：

退出代码 | 描述
--- | ---
`0` | 用户按了 确定 或 关闭。
`1` | 用户按了 取消，或者点了窗口关闭按钮。
`-1` | 发生了一个有异常。
`5` | 对话框因超时而关闭。

### 常规选项

所有 Zenity 对话框支持以下常规选项：

`--title`=标题

  指定对话框的标题。

`--window-icon`=图标路径

  指定显示在窗口框架上的图标，有四个图标也可以用下列关键字 - 'info'， 'warning'， 'question' 和 'error'。

`--width`=宽度

  指定对话框的宽度。

`--height`=高度

  指定对话框的高度。

`--timeout`=超时

  指定超出时间(秒)后对话框自动关闭。

### 帮助选项

Zenity 提供以下帮助选项：

`--help`

  显示简短的帮助文本。

`--help-all`

  显示所有对话框的完整帮助。

`--help-general`

  显示常规对话框选项的帮助文本。

`--help-calendar`

  显示日历对话框选项的帮助文本。

`--help-entry`

  显示文本输入框选项的帮助文本。

`--help-error`

  显示错误框选项的帮助文本。

`--help-info`

  显示信息框选项的帮助文本。

`--help-file-selection`

  显示文件打开框选项的帮助文本。

`--help-list`

  显示列表框选项的帮助文本。

`--help-notification`

  显示提示框选项的帮助文本。

`--help-progress`

  显示进度框选项的帮助文本。

`--help-question`

  显示询问框选项的帮助文本。

`--help-warning`

  显示警告框选项的帮助文本。

`--help-text-info`

  显示信息框选项的帮助文本。

`--help-misc`

  显示其他杂项的帮助文本。

`--help-gtk`

  显示 GTK+ 选项的帮助文本。

### 杂项

Zenity 也提供了其他的选项：

`--about`

  显示 关于 Zenity 对话框，包含 Zenity 版本信息、版权入信息和开发信息。

`--version`

  显示 Zenity 的版本号。

### GTK+ 选项

Zenity 支持标准的 GTK+ 选项，更多 GTK+ 选项的相关信息，请输入 `zenity -?` 命令。

### 环境变量

通常，Zenity 会检测启动它的终端窗口，并保持在它之上。这个行为也可以通过不设置 `WINDOWID` 环境变量来禁用。

## 日历对话框

使用 `--calendar` 选项来创建日历对话框。Zenity 返回选定的日期，并把它输出到显示器，如果没有在命令行指定日期，就使用当前系统日期。

日历对话框支持以下选项：

`--text`=文本

  指定日历对话框里显示的文本。

`--day`=日

  指定日历对话框中的天数，day 必须是介于 1~31 之间的数字。

`--month`=月

  指定日历对话框中的月份，month 必须是介于 1~12 之间的数字。

`--year`=年

  指定日历对话框中的年份。

`--date-format`=日期格式

  指定选定的日期返回时的样式，默认的格式取决于您的区域设置，日期格式 必须可以被 `strftime` 函数接受，例如 `%A %d/%m/%y`。

下面的脚本示范了如何创建一个日历对话框：

            #!/bin/sh

            if zenity --calendar \
            --title="选择日期" \
            --text="通过点击选择日期。" \
            --day=10 --month=8 --year=2004
              then echo $?
              else echo "没有选择日期"
            fi

### 日历对话框范例

Zenity 日历对话框范例

## 文件选择对话框

使用 `--file-selection` 选项创建一个文件选择对话框，Zenity 在标准输出返回选中的文件或目录。默认的文件选择对话框模式是打开对话框。

文件对话框支持以下选项：

`--filename`=文件名

  指定文件选择对话框在第一次显示时，选定的文件或文件夹。

`--multiple`

  允许在文件选择对话框里选中多个文件。

`--directory`

  在文件选择对话框里只允许选中文件夹

`--save`

  设置文件选择对话框模式为保存对话框。

`--separator`=分隔符

  指定用于分隔返回的文件名列表的字符。

下面的脚本示范了如何创建一个文件选择对话框：

            #!/bin/sh

            FILE=`zenity --file-selection --title="选择文件"`

            case $? in
                     0)
                            echo "\"$FILE\" 被选中。";;
                     1)
                            echo "没有选择文件。";;
                    -1)
                            echo "没有选择文件。";;
            esac

### 文件选择对话框范例

Zenity 文件选择对话框范例

## 通知区域图标

`--text`=文本

  指定显示在通知区域的文本。

下面的脚本示范了如何创建一个通知区域图标：

            #!/bin/sh

            zenity --notification\
              --window-icon="info" \
              --text="有系统更新软件包！"

### 通知区域图标范例

Zenity 通知图标范例

## 列表框

使用 `--list` 选项创建一个列表框，Zenity 在标准输出返回选中行的第一列项目。

对话框里的数据必须指定行和列，可以由标准输入提供，每一项都必须由换行符分隔。

如果您使用 `--checklist` 或 `--radiolist` 选项，每一行必须由“TRUE”或“FALSE”开始。

列表框支持以下选项：

`--column`=列

  指定列表框显示的列标题，您必须为每个要显示的列，用 `--column` 指定一个列标题。

`--checklist`

  指定列表框的第一列包含一个复选框。

`--radiolist`

  指定列表框的第一列包含单选按钮。

`--editable`

  指定显示的项可以编辑。

`--separator`=分隔符

  指定当列表框返回选中项时，使用什么字符。

`--print-column`=列

  指定选择列上显示什么，默认是“1”，“ALL”用于在列表上显示所有列。

下面的例子示范了如何创建一个列表框：

            #!/bin/sh

            zenity --list \
              --title="选择您想查看的 Bugs" \
              --column="Bug 编号" --column="严重" --column="描述" \
                992383 Normal "多选时 GtkTreeView 崩溃" \
                293823 High "GNOME 字典不能使用代理" \
                393823 Critical "菜单编辑器在 GNOME 2.0 中不能运行"

### 列表框范例

Zenity 列表框范例

## 消息框

Zenity 可以创建四种消息框：

- 错误框

- 信息框

- 询问框

- 警告框

对于每一种类型，使用 `--text` 选项来指定显示在对话框里的文本。

### 错误框

使用 `--error` 选项创建一个错误框。

下面的脚本示范了如何创建一个错误框：

              #!/bin/bash

              zenity --error \
              --text="找不到 /var/log/syslog."

#### 错误框范例

Zenity 错误框范例

### 信息框

使用 `--info` 选项创建一个信息框。

下面的脚本示范了如何创建一个信息框：

              #!/bin/bash

              zenity --info \
              --text="全部合并。更新第 3 个文件，总共 10 个。"

#### 信息框范例

Zenity 信息框范例

### 询问框

使用 `--question` 选项创建一个询问框。

下面的脚本示范了如何创建一个询问框：

              #!/bin/bash

              zenity --question \
              --text="您确定要执行吗？"

#### 询问框范例

Zenity 询问框范例

### 警告框

使用 `--warning` 选项创建一个警告框。

下面的脚本示范了如何创建一个警告框：

              #!/bin/bash

              zenity --warning \
              --text="断开电源以防止冲击电流。"

#### 警告框范例

Zenity 警告框范例

## 进度框

使用 `--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 进度框范例

## 文本框

使用 `--entry` 选项，创建一个文本框，Zenity 将文本框的内容返回到标准输出。

文本框支持以下选项：

`--text`=文本

  指定在文本框中显示的文本。

`--entry-text`=文本

  指定显示在文本框的文本域里的文本。

`--hide-text`

  隐藏文本框中文本域中的内容。

下面的脚本示范了如何创建一个文本框：

            #!/bin/sh

            if zenity --entry \
            --title="添加一项" \
            --text="请输入您的密码：" \
            --entry-text "密码" \
            --hide-text
              then echo $?
              else echo "没有输入密码"
            fi

### 文本框范例

Zenity 文本框范例

## 文本信息框

使用 `--text-info` 选项来创建一个文本信息框。

文本信息框支持以下选项：

`--filename`=文件名

  指定一个加载到文本信息框里的文件。

`--editable`

  显示的文本允许编辑，当对话框关闭后，编辑后的文本显示到显示器上。

下面的脚本示范了如何创建一个文本信息框：

            #!/bin/sh

            FILE=`zenity --file-selection \
              --title="选择一个文件"`

            case $? in
                     0)
                            zenity --text-info \
                              --title=$FILE \
                              --filename=$FILE \
                              --editable 2>/tmp/tmp.txt;;
                     1)
                            echo "没有选择文件。";;
                    -1)
                            echo "没有选择文件.";;
            esac

### 文本信息框范例

Zenity 文本信息框范例