一个 zenity 命令上的两个输入框

Two entry boxes on one zenity command

使用 zenity 我可以创建这样的组合框

zenity --entry --title "Window title" --text "Insert your choice." a b c d e

如何在一个对话框中创建两个组合框,我尝试使用这样的分隔符命令

zenity --entry --title "Select Flash Drives" --text "Insert your choice." --separator="," --add-entry="IP address" --add-entry="PORT"

但是它说

--separator is not supported for this dialog

是否可以在一个 zenity 对话框中创建两个组合框

不行,不可能。 Zenity 的设计 "to create simple dialogs" 而您所要求的是比 简单 更进一步的一小步。

我认为您需要寻找其他工具。 YAD 是 Zenity 的一个分支,增加了一些改进,可能会帮助您实现您想要的。

虽然两个组合框是不可能的,但可以使用 --forms 选项在一个对话框中生成两个输入框,该选项还允许合并列表(用户可以从每个列表中 select最多一项):

zenity --forms --title "Select Flash Drives" --text  "Select Flash Drives" \
--add-entry "Insert your choice" \
--add-entry="IP address"

甚至

zenity --forms --title "Select Flash Drives" --text  "Select Flash Drives" \
--add-list "Insert your choice" --list-values 'a|b|c' \
--add-entry="IP address" --add-entry="PORT"

--forms 的主要问题是它不允许使用默认值。 (除非表单以列表开头,在这种情况下,它的第一个值似乎默认为 selected。)唯一的解决方法是在问题文本中指定默认值(以便用户获得看到它)然后检查用户是否在 zenity 之外的脚本中提供了任何值:

RETURNVALUE=`zenity --forms --title "Select Flash Drives" --text  "Select Flash Drives" \
--add-entry="IP address (leave empty to use 8.8.8.8)" \
--add-list "Insert your choice (leave empty to use C)" --list-values 'a|b|c'`

# extract the IP and DRIVE values
IP=$(awk -F'|' '{print }' <<<$RETURNVALUE);    
DRIVE=$(awk -F'|' '{print }' <<<$RETURNVALUE);

# [[ -z $var ]] is true iff the length of $var is zero
# the second element in && is evaluated only if the first one is true 
[[ -z $IP ]] && IP="8.8.8.8";                    
[[ -z $DRIVE ]] && DRIVE="C";