ubuntu生成GUI对话框工具zenity

本文最后更新于:2025年11月19日 下午

有时候我们编写的脚本需要弹出GUI对话框提示用户进行下一步操作,或者显示一些信息,或者获取用户的输入。zenity就是这么一个工具,输入一条命令,弹出一个对话框。

支持的对话框类型有如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
应用程序选项:
--calendar 显示日历对话框
--entry 显示文本输入对话框
--error 显示错误对话框
--info 显示信息对话框
--file-selection 显示文件选择对话框
--list 显示列表对话框
--notification 显示通知
--progress 显示进度指示对话框
--question 显示问题对话框
--warning 显示警告对话框
--scale 显示范围对话框
--text-info 显示文本信息对话框
--color-selection 显示颜色选择对话框
--password 显示口令对话框
--forms 显示表单对话框
--display=DISPLAY X display to use

帮助信息

1
2
3
4
# 查看通用选项
zenity --help-general
# 查看不同类型对话框的选项
zenity --help-entry

下面举一些简单的例子。

entry 单行文本输入对话框

1
zenity --entry --title 输入姓名


输入名字,点击确认后,zenity会向标准输出输入的内容。所以脚本程序只需要捕获输出即可。

question 问题

1
zenity --question --text "喜欢今天的天气吗" --timeout=5 --ok-label="喜欢" --cancel-label="一般" --title="`date`" --width=300 --height=100

这次我们修改了标题,自定义了ok和cancel内容。还添加了超时。问题的肯定还是否定回答,决定应用的返回值。

list 列表

1
2
3
4
5
6
7
8
9
10
$ zenity --list \
--title="电影列表" \
--column="ID" --column="电影名称" --column="发行年份" \
1 "肖申克的救赎" 1994 \
2 "教父" 1972 \
3 "教父2" 1974 \
4 "黑暗骑士" 2008 \
5 "十二怒汉" 1957 \
--width=400 --height=250
3


返回数据为选中的行。

text-info 多行文本框

它从一个文件中读入内容,然后展示出来

1
2
3
4
$ echo -e "hello\nworld\n" > /tmp/ttt.txt
$ zenity --text-info --title=备注 --editable --width=500 --height=300 --filename=/tmp/ttt.txt
hello
world

编辑之后确认,它向标准输出打印文本框中内容。

forms 表单

它可以同时获取多个信息

1
2
3
4
5
6
7
$ zenity --forms --title="注册表单" \
--text="请填写以下信息" \
--separator="," \
--add-entry="姓名" \
--add-password="密码" \
--add-calendar="日期"
leon,123456,2024年05月03日

最终的结果也是输出到标准输出中,以–separator指定的分割符分割

问题

如何在crontab命令中弹出对话框

配置如下环境变量

1
2
3
export DISPLAY=":0"
export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus"
unset GTK_PATH

在vscode的命令行中遇到symbol lookup error

报错如下:

1
zenity: symbol lookup error: /snap/core20/current/lib/x86_64-linux-gnu/libpthread.so.0: undefined symbol: __libc_pthread_init, version GLIBC_PRIVATE

去掉如下环境变量即可

1
unset GTK_PATH

替代品

yad–提供更多的选项


人生苦短,远离bug Leon, 2024-05-03

ubuntu生成GUI对话框工具zenity
https://leon0625.github.io/2024/05/03/9515f721ea62/
作者
leon.liu
发布于
2024年5月3日
许可协议