偶然にも、Zenityを使用してコンボボックスを表示できることがわかりました(バージョンテスト:2.32.1)。次のコードを参照してください。
#!/bin/bash
array=(a b c d e)
value=$(zenity --entry --title "Window title" --text "${array[@]}" --text "Insert your choice.")
結果は、次の3つの画像で示されます。
それについて2つの質問があります。
この機能に関するドキュメントはありますか? zenity documentation には何も見つかりませんでした。
配列の最初の値がコンボボックスに表示されないのはなぜですか?上記の例では、私の配列は(a b c d e)
であり、コンボボックスにはb c d e
のみが表示されます。
回避策として、配列に値を追加します(例:(0 a b c d e)
)。
配列の最初の要素は--text
によって食い尽くされます。拡張後、ゼニティラインは次のようになります。
zenity --entry --title "Window title" --text a b c d e --text "Insert your choice."
# Which zenity treats equivalent to
zenity --entry --title "Window title" --text a --text "Insert your choice." b c d e
したがって、最初にテキストをa
に設定してから、[選択を挿入]で上書きします。そして、残りの引数は選択肢になります。
あなたが欲しいのは:
zenity --entry --title "Window title" --text "Insert your choice." a b c d e
# Hence:
zenity --entry --title "Window title" --text "Insert your choice." "${array[@]}"
これは、マニュアルではなくzenity --help-forms
に実際に文書化されています(質問が投稿されたときではなく、チェックされなかったかもしれません)。
$ LANG=en_US zenity --help-forms
Usage:
zenity [OPTION...]
Forms dialog options
--forms Display forms dialog
--add-entry=Field name Add a new Entry in forms dialog
--add-password=Field name Add a new Password Entry in forms dialog
--add-calendar=Calendar field name Add a new Calendar in forms dialog
--add-list=List field and header name Add a new List in forms dialog
--list-values=List of values separated by | List of values for List
--column-values=List of values separated by | List of values for columns
--add-combo=Combo box field name Add a new combo box in forms dialog
--combo-values=List of values separated by | List of values for combo box
--show-header Show the columns header
--text=TEXT Set the dialog text
--separator=SEPARATOR Set output separator character
--forms-date-format=PATTERN Set the format for the returned date
したがって:
zenity --forms --title "Window title" --text "Combo name" --add-combo "Insert your choice." --combo-values "a|b|c|d|e"
値の配列には--text-entry
ではなく--text
を使用したいと思います( reference )。を使用して:
#!/bin/bash
array=(a b c d e)
value=$(zenity --entry --title "Window title" --entry-text "${array[@]}" --text "Insert your choice.")
配列の最初の値が事前に入力されたドロップダウンボックスのデフォルト値と、使用可能なすべての値が表示されます。