Di mana penggunaan kotak kombo yang didokumentasikan dengan zenity?

11

Saya menemukan secara kebetulan adalah mungkin untuk menampilkan kotak kombo dengan zenity (versi diuji: 2.32.1). Lihat kode berikut:

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

Hasilnya diilustrasikan dengan 3 gambar berikut:

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Saya punya dua pertanyaan tentang itu:

  1. Apakah ada dokumentasi tentang fungsi ini? Saya tidak menemukan apa pun di dokumentasi zenity .

  2. Mengapa nilai pertama array saya tidak muncul di kotak kombo? Pada contoh di atas, array saya adalah (a b c d e), dan kotak kombo hanya menampilkan b c d e.

    Sebagai solusinya, saya menambahkan nilai dalam array saya, misalnya (0 a b c d e).

jep
sumber

Jawaban:

5

Elemen pertama dari array dimakan oleh --text. Setelah ekspansi, garis zenitiy Anda terlihat seperti:

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

Jadi, pertama-tama Anda mengatur teks a, kemudian Anda menimpanya dengan "Sisipkan pilihan Anda." Dan argumen yang tersisa menjadi pilihan.

Yang Anda inginkan adalah:

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
sumber
4

Ini sebenarnya didokumentasikan (mungkin tidak pada saat pertanyaan diposting, tidak memeriksa), bukan di manual tetapi di 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

Karena itu:

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

Saya pikir Anda ingin menggunakan --text-entryuntuk array nilai, bukan --text( referensi ). Menggunakan:

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

Saya melihat nilai default kotak dropdown yang sudah diisi dengan nilai pertama array, dan semua nilai tersedia.

pwlars
sumber
Terima kasih atas jawabannya. Sangat aneh bahwa manual tidak merujuk ke kotak kombo.
jep