使用Zenity在终端弹出对话框 1. 介绍 2. 用法 3. 日历对话框 4. 文件选择对话框 5. 通知区域图标 6. 列表框 7. 消息框 8. 进度框 9. 文本框 10. 文本信息框 1. 介绍 Zenity可以创建下列类型的简单对话框: 日历 文件选择框 列表框 提示图标 消息框 错误框 信息框 询问框 警告框 进度框 文本框 文本信息框 2. 用法 在您写脚本时,可以使用Zenity创建简单的交互式对话框,例如: 您可以创建从用户那儿获得信息的对话框。例如,您可以提示用户从日历对话框中选择日期,或者从文件选择框里选择一个文件。 您可以创建向用户提供信息的对话框。例如,您可以用进度条来显示一个操作的当前运行状态,或者用一个警告框提醒用户。 当用户关闭了对话框,Zenity将输出对话框操作的文本到显示器。 当您写了Zenity命令,确保每个参数用双引号括起来。 例如,使用 : zenity --calendar --title="假期安排" 不要用: zenity --calendar --title=假期安排 如果您没有使用双引号,可能会产生不可预料的结果。 2.1. 访问键 2.2. 退出代码 2.3. 常规选项 2.4. 帮助选项 2.5. 杂项 2.6. GTK+ 选项 2.7. 环境变量 2.1. 访问键 访问键允许您用键盘来执行一个操作,而不是用鼠标点击菜单命令或对话框按钮。每个访问键有一个标识符,是一个在菜单或对话框选项上的带下划线的字母。 一些Zenity对话框支持使用访问键,要指定一个字符用于访问键,在对话框的文本字符前面加一个下划线,下面的例子是如何让字母“C”作为访问键: "选择(_C)". 2.2. 退出代码 Zenity返回以下退出代码: 退出代码 描述 0 用户按了确定或关闭。 1 用户按了取消,或者点了窗口关闭按钮。 -1 发生了一个有异常。 5 对话框因超时而关闭。 2.3. 常规选项 所有Zenity对话框支持以下常规选项: --title= 标题 指定对话框的标题。 --window-icon= 图标路径 指定显示在窗口框架上的图标,有四个图标也可以用下列关键字 - 'info', 'warning', 'question' 和 'error'。 --width= 宽度 指定对话框的宽度。 --height= 高度 指定对话框的高度。 --timeout= 超时 指定超出时间(秒)后对话框自动关闭。 2.4. 帮助选项 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+ 选项的帮助文本。 2.5. 杂项 Zenity也提供了其他的选项: --about 显示关于 Zenity对话框,包含Zenity版本信息、版权入信息和开发信息。 --version 显示Zenity的版本号。 2.6. GTK+ 选项 Zenity支持标准的 GTK+ 选项,更多 GTK+ 选项的相关信息,请输入zenity -?命令。 2.7. 环境变量 通常,Zenity会检测启动它的终端窗口,并保持在它之上。这个行为也可以通过不设置WINDOWID环境变量来禁用。 3. 日历对话框 使用--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 图 1 日历对话框范例 4. 文件选择对话框 使用--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 图 2 文件选择对话框范例 5. 通知区域图标 --text= 文本 指定显示在通知区域的文本。 下面的脚本示范了如何创建一个通知区域图标: #!/bin/sh zenity --notification\ --window-icon="info" \ --text="有系统更新软件包!" 图 3 通知区域图标范例 6. 列表框 使用--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 中不能运行" 图 4 列表框范例 7. 消息框 Zenity可以创建四种消息框: 错误框 信息框 询问框 警告框 对于每一种类型,使用--text选项来指定显示在对话框里的文本。 7.1. 错误框 7.2. 信息框 7.3. 询问框 7.4. 警告框 7.1. 错误框 使用--error选项创建一个错误框。 下面的脚本示范了如何创建一个错误框: #!/bin/bash zenity --error \ --text="找不到 /var/log/syslog." 图 5 错误框范例 7.2. 信息框 使用--info选项创建一个信息框。 下面的脚本示范了如何创建一个信息框: #!/bin/bash zenity --info \ --text="全部合并。更新第 3 个文件,总共 10 个。" 图 6 信息框范例 7.3. 询问框 使用--question选项创建一个询问框。 下面的脚本示范了如何创建一个询问框: #!/bin/bash zenity --question \ --text="您确定要执行吗?" 图 7 询问框范例 7.4. 警告框 使用--warning选项创建一个警告框。 下面的脚本示范了如何创建一个警告框: #!/bin/bash zenity --warning \ --text="断开电源以防止冲击电流。" 图 8 警告框范例 8. 进度框 使用--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 图 9 进度框范例 9. 文本框 使用--entry选项,创建一个文本框,Zenity将文本框的内容返回到标准输出。 文本框支持以下选项: --text= 文本 指定在文本框中显示的文本。 --entry-text= 文本 指定显示在文本框的文本域里的文本。 --hide-text 隐藏文本框中文本域中的内容。 下面的脚本示范了如何创建一个文本框: #!/bin/sh if zenity --entry \ --title="添加一项" \ --text="请输入您的密码:" \ --entry-text "密码" \ --hide-text then echo $? else echo "没有输入密码" fi 图 10 文本框范例 10. 文本信息框 使用--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 图 11 文本信息框范例