Où est l'utilisation documentée de combo box avec zenity?

11

J'ai trouvé par hasard qu'il était possible d'afficher une combo avec zenity (version testée: 2.32.1). Voir le code suivant:

#!/bin/bash
array=(a b c d e)
value=$(zenity --entry --title "Window title" --text "${array[@]}" --text "Insert your choice.")

Le résultat est illustré par les 3 images suivantes:

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

J'ai deux questions à ce sujet:

  1. Existe-t-il une documentation sur cette fonctionnalité? Je n'ai rien trouvé dans la documentation zenity .

  2. Pourquoi la première valeur de mon tableau n'apparaît pas dans la zone de liste déroulante? Dans l'exemple ci-dessus, mon tableau est (a b c d e)et la zone de liste déroulante s'affiche uniquement b c d e.

    Comme solution de contournement, j'ajoute une valeur dans mon tableau, par exemple (0 a b c d e).

jep
la source

Réponses:

5

Le premier élément du tableau est dévoré par --text. Après expansion, votre ligne zenitiy ressemble à:

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

Vous définissez donc d'abord le texte sur a, puis vous le remplacez par "Insérer votre choix". Et les arguments restants deviennent les choix.

Ce que vous voulez c'est:

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[@]}"
geirha
la source
4

Ceci est en fait documenté (peut-être pas au moment où la question a été publiée, n'a pas été vérifiée), pas dans le manuel mais dans 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

Par conséquent:

zenity --forms --title "Window title" --text "Combo name" --add-combo "Insert your choice." --combo-values "a|b|c|d|e"
Skippy le Grand Gourou
la source
3

Je pense que vous souhaitez utiliser --text-entrypour le tableau de valeurs, pas --text( référence ). En utilisant:

#!/bin/bash
array=(a b c d e)
value=$(zenity --entry --title "Window title" --entry-text "${array[@]}" --text "Insert your choice.")

Je vois la valeur par défaut de la liste déroulante pré-remplie avec la première valeur du tableau et toutes les valeurs disponibles.

pwlars
la source
Merci d'avoir répondu. Il est curieux que le manuel ne fasse pas référence à la combo box.
2011