[TOC]
` `Zenity是一个开源和跨平台的应用程序,它在命令行中显示GTK +对话框并使用shell脚本。
` `**GNU Linux**的操作系统建立在非常强大的**内核**称为Linux。Linux以其命令行操作而闻名。随着Linux在日常和桌面计算中的发明,nix保持不再偏向命令行,它同样是图形化和开发图形应用程序保持不再是一个困难的任务。
![](https://img.kancloud.cn/a7/89/a789daf636550bef776a782f83d73a28_709x461.png)
## Zenity是什么
` `**enity**是一个开源和显示**GTK +对话框**的命令行和使用shell脚本一个跨平台的应用程序。它允许在图形框中向/从shell请求和呈现信息。该应用程序允许您在命令行中创建图形对话框,并使用户和shell之间的交互非常容易。
` `还有其他的替代品,但没有比zenity简单的,特别是当你不需要复杂的编程。Zenity,一个工具,你必须有你的手。
## Zenity特性
1. FOSS软件
2. 跨平台应用程序
3. 允许GTK +对话框执行
4. 命令行工具
5. 在Shell脚本中的支持
## 用处
1. 轻松创建GUI
2. 比其他复杂工具更少的功能
3. 使shell脚本能够与GUI用户交互
4. 对于图形用户交互,可以进行简单的对话创建
## 在Linux中安装Zenity
` `**Zentity**默认安装或者在今天大多数的标准Linux发行库可用。您可以通过执行以下命令检查是否安装到您的机器上。
~~~
yhp@yhp-PC:~$ zenity --version
3.22.0
~~~
~~~
yhp@yhp-PC:~$ whereis zenity
zenity: /usr/bin/zenity /usr/share/zenity /usr/share/man/man1/zenity.1.gz
~~~
` `如果它没有安装,您可以使用如下**apt**或**Yum**命令进行安装。
~~~
ravisaive@howtoing:~$ sudo apt-get install zenity [on Debian based systems]
root@howtoing:~# yum install zenity [on RedHat based systems]
~~~
` `此外,您还可以从源文件建立它,使用下面的链接下载最新**的zenity**源代码包。
[http://ftp.gnome.org/pub/gnome/sources/zenity/](http://ftp.gnome.org/pub/gnome/sources/zenity/)
## Zenity基本对话框
` `一些**的zenity**的基本对话框,它可以直接在命令行调用的。
### 1.快速日历对话框怎么样?
~~~
yhp@yhp-PC:~$ zenity --calendar
~~~
![](https://img.kancloud.cn/12/64/1264bcb004f7d18ef4399adbc5ac9cff_185x339.png)
### 2.错误对话框
~~~
yhp@yhp-PC:~$ zenity --error
~~~
![](https://img.kancloud.cn/71/03/71034883ed665e9a8d83270cf44ff180_168x169.png)
### 3.一般文本输入对话框
~~~
yhp@yhp-PC:~$ zenity --entry
~~~
![](https://img.kancloud.cn/04/94/0494750c6e7ee5752624d118d4299985_192x146.png)
### 4.信息对话框
~~~
yhp@yhp-PC:~$ zenity --info
~~~
![](https://img.kancloud.cn/51/e0/51e05719dfa705f36097cc32a436367c_192x195.png)
### 5.问题对话框
~~~
yhp@yhp-PC:~$ zenity --question
~~~
![](https://img.kancloud.cn/b7/c0/b7c0adf05ca7bb48b137d6780ff46c6c_699x254.png)
### 6.进度栏
~~~
yhp@yhp-PC:~$ zenity --progress
~~~
![](https://img.kancloud.cn/2b/ad/2bad2902e1b035472acc355ce4720f65_373x163.png)
### 7.缩放对话框
~~~
yhp@yhp-PC:~$ zenity --scale
~~~
![](https://img.kancloud.cn/ea/95/ea95e1ff0400f0b66b8098c2df7a9d4a_299x144.png)
### 8.密码对话框
~~~
yhp@yhp-PC:~$ zenity --password
~~~
![](https://img.kancloud.cn/49/1c/491c29528bbf6ee5eed705bb6bc08a54_264x193.png)
### 9.窗体对话框
~~~
yhp@yhp-PC:~$ zenity --forms
~~~
![](https://img.kancloud.cn/3d/33/3d33a34d899b37de88a1bba68e2564cd_189x123.png)
### 10.关于对话
~~~
yhp@yhp-PC:~$ zenity --about
~~~
![](https://img.kancloud.cn/a9/0d/a90db4f6cbd8c786fce1cdbe7ddeffb6_427x281.png)
## 创建Shell脚本对话框
` `现在,我们将使用要讨论**的zenity对话框**创建简单的shell脚本在这里。虽然我们可以通过执行创建一个对话框**的zenity**直接从shell命令(象我们上面那样),但是我们不能为了获得一些有意义的结果链接两个对话框。
` `如果一个交互式对话框从你的输入,并显示结果。
~~~
#!/bin/bash
first=$(zenity --title="Your's First Name" --text "What is your first name?" --entry)
zenity --info --title="Welcome" --text="Mr./Ms. $first"
last=$(zenity --title="Your's Last Name" --text "$first what is your last name?" --entry)
zenity --info --title="Nice Meeting You" --text="Mr./Ms. $first $last"
~~~
![](https://img.kancloud.cn/6c/02/6c02e1d82a31b20afdb2420062eecaa2_635x623.png)
## 关于脚本描述
~~~
#!/bin/bash
~~~
` `在下面的行中,“first”是一个变量,变量的值在运行时是Generated。
1. 'entry'指的zenity被要求生成一个文本输入框。
2. '--title'定义生成的文本框的标题。
3. '--text='定义了可在文本输入框中的文本。
~~~
first=$(zenity --title="Your's First Name" --text "What is your first name?" --entry)
~~~
` `以下脚本文件的这一行用于生成信息(-info)对话框,标题为“欢迎”和文本“Mr./Ms.first”.
~~~
zenity --info --title="Welcome" --text="Mr./Ms. $first"
~~~
` `脚本的这一行类似于脚本的行号二,除了这里定义了一个新变量“last”。
~~~
last=$(zenity --title="Your's Last Name" --text "$first what is your last name?" --entry)
~~~
` `脚本的最后一行再次类似于脚本的第三行,它生成信息对话框,其中包含变量'$ first'和'$ last'。
~~~
zenity --info --title="Nice Meeting You" --text="Mr./Ms. $first $last"
~~~
` `有关如何创建一个使用shell脚本自定义对话框的更多信息,请访问下面的参考页**的zenity。** [https://help.gnome.org/users/zenity/stable/](https://help.gnome.org/users/zenity/stable/)
## Zenity 中文手册
要看zenity参数用法,打zenity --help或man zenity
Usage: zenity [OPTION...]
### 对话框选项
* --calendar 显示日历对话框
* --entry 显示文字输入栏对话框
* --error 显示错误信息对话框
* --file-selection 显示文件选择对话框
* --info 显示信息对话框
* --list 显示清单对话框
* --progress 显示进度指示窗
* --question 显示提问信息对话框
* --text-info 显示文字资信对话框
* --warning 显示警告信息对话框
### 一般选项
* --title=标题 指定对话框的标题
* --window-icon=图示路径 指定视窗使用的图示
* --width=宽度 指定宽度
* --height=高度 指定高度
*
### 日历选项
* --text=STRING 指定对话框中的文字
* --day=INT 指定日历中的日期
* --month=INT 指定日历中的月份
* --year=INT 指定日历中的年份
* --date-format=STRING 指定回传的日期格式
### 文字输入栏选项
* --text=STRING 指定对话框中的文字
* --entry-text=STRING 指定输入栏中的文字
* --hide-text 隐藏输入栏中的文字
### 错误信息选项
* --text=STRING 指定对话框中的文字
### 有关文件选择的选项
* --filename=文件名称 指定文件名称
* --multiple 允许同时选择多个文件
* --separator=分隔字符 指定分隔输出结果的字符。
### 信息选项
* --text=STRING 指定对话框中的文字
### 清单选项
* --column=STRING 指定栏位标题
* --checklist 第一栏使用独立选择按钮
* --radiolist 第一栏使用多项选择按钮
* --separator=分隔字符 指定分隔输出结果的字符
* --editable 可以更改文字
### 进度选项
* --text=STRING 指定对话框中的文字
* --percentage=INT 指定开始时的百份比数值
* --pulsate 填满进度列
* --auto-close 当进度达到100% 时关闭对话框
### 提问选项
* --text=STRING 指定对话框中的文字
### 文字选项
* --filename=文件名称开启文件
* --editable 可以更改文字
### 警告信息选项
* --text=STRING 指定对话框中的文字
### GTK+ 选项
* --gdk-debug=标签 准备设定的gdk 调试标签
* --gdk-no-debug=标签 准备去除的gdk 调试标签
* --display=画面 准备使用的 X 画面
* --sync 进行 X 同步呼叫
* --name=名称 视窗总管所需的程式名称
* --class=类别 视窗总管所需的程式类别名称
* --gxid-host=主机
* --gxid-port=端口号
* --gtk-debug=标签 准备设定的gtk+ 调试标签
* --gtk-no-debug=标签 准备去除的gtk+ 调试验标签
* --g-fatal-warnings 将所有警告信息作为严重错误处理
* --gtk-module=模块 载入额外的 Gtk 模块
### 其它选项
* --about 关于 zenity
* --version 显示版本
### 求助选项
* -?, --help Show this help message
* --usage Display brief usage message
## zenity图形界面之信息对话框和单复选对话框
```
#!/bin/bash
CD="cd"
LS="ls"
RM="rm"
CP="cp"
FIND="find"
GREP="grep"
OTHERS="others"
## 自定义函数1,不传递参数
cdFunction()
{
##2,信息对话框
zenity --info --width 300 --height 200 --text="用法:cd (参数),进入到某个目录中,cd ..是返回到上一级目录,cd ../..是返回到上上一级目录,cd(回车) 进入用户主目录,cd ~进入用户主目录,cd -返回进入此目录之前所在的目录,cd !$把上个命令的参数作为cd参数使用。"
}
lsFunction()
{
zenity --info --width 300 --height 200 --text="用法:ls (选项) (参数),选项-l,所有输出信息用单列格式输出,不输出为多列,选项-t,用文件和目录的更改时间排序,参数一般为文件或者目录。"
}
rmFunction()
{
zenity --info --width 300 --height 200 --text="用法:rm (选项) (参数),选项-f,即使原档案属性设为唯读,也可以删除,无需逐一询问,选项-r,将目录及以下之档案逐一删除。"
}
cpFunction()
{
zenity --info --width 300 --height 200 --text="用法:cp (选项) (参数),选项-a,这个选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容,选项-r,若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。"
}
## 自定义函数2,传递参数
checkFunction()
{
declare i
if [ $1 == 1 ]
then
echo $2
else
tmp=$2
for((i=0;i<$1;i++))
do
str=${tmp%%|*}
tmp=${tmp#*|}
echo $str
done
fi
}
########## function 1
while((1))
do
##1,列表单选框
select_command=$(zenity --list --radiolist --width 300 --height 400 --text="linux 常见命令" --column="选择" --column="内容列表" TRUE $CD FALSE $LS FALSE $RM FALSE $CP);
## 处理自定义函数的结果
if [ "$select_command" == "$CD" ]
then
cdFunction
elif [ "$select_command" == "$LS" ]
then
lsFunction
elif [ "$select_command" == "$RM" ]
then
rmFunction
elif [ "$select_command" = "$CP" ]
then
cpFunction
else
break
fi
done
########## function 2
while((1))
do
##2,列表复选框
select_option=$(zenity --list --checklist --width 300 --height 400 --text="查找命令" --column="选择" --column="内容列表" FALSE $FIND FALSE $GREP FALSE $LS FALSE $OTHERS);
if [ "$select_option" == "$FIND|$GREP|$LS|$OTHERS" ]
then
checkFunction 4 $select_option
elif [ "$select_option" == "$FIND|$GREP|$LS" ]
then
checkFunction 3 $select_option
elif [ "$select_option" == "$FIND|$GREP|$OTHERS" ]
then
checkFunction 3 $select_option
elif [ "$select_option" == "$FIND|$LS|$OTHERS" ]
then
checkFunction 3 $select_option
elif [ "$select_option" == "$GREP|$LS|$OTHERS" ]
then
checkFunction 3 $select_option
elif [ "$select_option" == "$FIND|$GREP" ]
then
checkFunction 2 $select_option
elif [ "$select_option" == "$FIND|$LS" ]
then
checkFunction 2 $select_option
elif [ "$select_option" == "$FIND|$OTHERS" ]
then
checkFunction 2 $select_option
elif [ "$select_option" == "$GREP|$LS" ]
then
checkFunction 2 $select_option
elif [ "$select_option" == "$GREP|$OTHERS" ]
then
checkFunction 2 $select_option
elif [ "$select_option" == "$LS|$OTHERS" ]
then
checkFunction 2 $select_option
elif [ "$select_option" == "$FIND" ]
then
checkFunction 1 $select_option
elif [ "$select_option" == "$GREP" ]
then
checkFunction 1 $select_option
elif [ "$select_option" == "$LS" ]
then
checkFunction 1 $select_option
elif [ "$select_option" == "$OTHERS" ]
then
checkFunction 1 $select_option
else
break
fi
done
exit 0
```
![](https://img.kancloud.cn/53/bb/53bb9dddba8b5c23cd067ca840e28adc_748x618.png)
- 0 工具
- 0.1 图片无损放大
- 1 deepin系统
- 1.1 deepin系统安装
- 1.2 deepin创建desktop文件
- 1.3 浏览器运行虚拟机
- 1.4 linux的百度网盘突然打不
- 1.5 deepin安装后个人配置
- 1.5.1 安装公式编辑器AxMath
- 1.5.2 Deepin标题栏太高的解决办法(自定义高度)
- 1.5.3 linux下配置VS Code的标题栏风格
- 1.5.4 安装脚本解释器fish
- 1.6 关于软件安装
- 1.6.1 rpm和deb包想换转换的方法
- 1.7 deepin开机自启的设置方法
- 2 tiny core系统
- 2.1 安装系统到硬盘
- 2.2 系统软件安装介绍
- 2.3 安装控制台计算器bc
- 2.4 关机保存的方法
- 2.5 linux文件结构说明
- 2.6 为tinycore配置ssh
- 3 使用Linux中的一些技巧
- 3.1 软连接的使用
- 3.2 LInux下解压
- 3.3 删除操作
- 3.4 Zenity-在命令行和Shell脚本中创建图形(GTK +)对话框
- 3.4.1 列表框
- 3.4.2 口令对话框
- 3.4.3 消息对话框
- 3.4.3.1 信息对话框
- 3.4.3.2 错误框
- 3.4.3.3 问题对话框
- 3.4.3.4 警告对话框
- 3.4.4 范围对话框(滑条)
- 3.4.5 文件选择对话框
- 3.4.6 表单对话框
- 3.4.7 文本信息框
- 3.4.8 进度框
- 3.4.9 文本输入框
- 3.4.10 通知区域图标
- 3.4.11 日历对话框
- 3.4.12 颜色对话框
- 3.4.13 上述对话框测试文件
- 3.4.14 使用C++调用zenity
- 3.5 Linux whereis、find和locate命令
- 3.6 字体下载
- 3.7 使用Electron 创建跨平台的应用程序
- 3.8 shell的使用
- 3.8.1 $$,$?等表示什么
- 3.8.2 shell随机产生某一个范围内的整数
- 3.8.3 写shel脚本的一些使用操作
- 3.8.4 linux shell操作二进制文件
- 3.8.5 shell中的一些实用技巧
- 3.8.5.1 列出当前路径下的所有文件夹
- 3.8.5.2 列出当前路径下所有文件
- 3.8.5.3 获取当前虚拟终端的大小
- 3.8.5.4 判断输入字符串是否为数字
- 3.8.5.5 bash中的数学运算
- 3.8.5.6 按照文件创建时间顺序列出文件
- 3.8.5.7 echo输出含空格不换行的设置方法
- 3.8.5.8 find 递归/不递归 查找子目录的方法
- 3.8.5.9 echo显示颜色设置
- 3.8.5.10 bash中使用${}字符操作方法
- 3.8.5.11 ls查找目录,文件,软连接等的方法
- 3.8.5.12 检测某个程序是否在运行
- 3.8.5.13 bash/shell 解析命令行参数工具:getopts/getopt
- 3.8.5.14 获取脚本的绝对路径
- 3.8.6 使用bash写的脚本管理脚本
- 3.9 Linux创建自定义命令
- 3.10 deepin挂载远程文件夹到本地
- 3.11 linux root用户添加用户
- 3.12 实用脚本或者命令
- 3.12.1 命令行 将ppt转换为 pdf
- 3.12.2 deepin上实现自定义命令
- 4 slitaz系统
- 4.1 系统安装
- 4.2 安装软件命令tazpkg
- 4.3 使用说明
- 4.4 用 tazlito 构建 livecd自制linux系统
- 4.5 英文显示支持设置方法
- 4.6 配置ssh
- 5 busybox的编译使用
- 5.1 busybox介绍
- 5.2 busybox编译使用
- 6 配置自己的linux
- 6.1 在deepin上编译linux内核
- 7 每天一个linux命令
- 7.1 文件管理类
- 7.1.1 cat--接文件并打印到标准输出设备上
- 7.1.2 chattr--改变文件属性
- 7.1.3 chgrp--变更文件或目录的所属群组
- 7.1.4 chmod --控制文件如何被他人所调
- 7.1.5 chown命令--指定文件的拥有者改为指定的用户或组
- 7.1.6 grep命令--用于查找文件里符合条件的字符串
- 7.1.7 其他
- 7.2 文档编辑类
- 7.2.1 col--过滤控制字符
- 7.2.2 colrm--滤掉指定的行
- 7.2.3 comm --比较两个已排过序的文件
- 7.2.4 awk--一种处理文本文件的语言,是一个强大的文本分析工具
- 7.2.5 sed命令
- 7.3 文件传输类
- 7.3.1 prm--将一个工作由打印机贮列中移除
- 7.4 磁盘管理类
- 7.4.1 cd--切换当前工作目录至 dirName(目录参数)。
- 7.4.2 df--显示目前在Linux系统上的文件系统的磁盘使用情况统计
- 7.4.3 dirs--显示目录记录
- 7.4.5 du--显示目录或文件的大小
- 8 其他系统
- 8.1 Alpine Liunx
- 8.1.2 简介
- 8.1.2 本地安装
- 8.1.3 apk软件包管理
- 8.1.4 配置ssh