やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

zenity --list でリスト表示する

 リスト表示する。

zenity --list

$ zenity --help-list
用法:
  zenity [オプション...]

一覧ダイアログのオプション
  --list                                            一覧ダイアログを表示する
  --text=TEXT                                       ダイアログに表示する文字列を指定する
  --column=COLUMN                                   列見出しを指定する
  --checklist                                       先頭の列にチェックボックスを使用する
  --radiolist                                       先頭の列にラジオボタンを使用する
  --imagelist                                       先頭の列に画像を使用する
  --separator=SEPARATOR                             出力を区切る文字を指定する
  --multiple                                        複数行を選択可能にする
  --editable                                        テキストを変更可能にする
  --print-column=NUMBER                             特定の列を出力する (デフォルトは '1''ALL' ですべての列を出力)
  --hide-column=NUMBER                              指定した列を隠す
  --hide-header                                     列見出しを隠す
  --mid-search                                      デフォルトの検索動作を変更し、テキストの先頭ではなく途中からでも検索できるようにする

書式

  • --listは最低でもひとつの--columnを指定せねば使用できない
    • 書式: --column 列名 1行目値 2行目値 3行目値 ...
    • 複数列をつくる場合: --column 列A --column 列B --column 列C 1行A列値 1行B列値 1行C列値 2行A列値 2行B列値 2行C列値 ...

--column

$ zenity --list --column=列名1232

f:id:ytyaru:20190312160022p:plain f:id:ytyaru:20190312160035p:plain

key 説明
, フォーカス移動
Space 決定
  • 決定した値が返ってくるためGUICUI間で対話できる

--hide-header

 1列しかないとき、普通はヘッダ表示しない。

$ zenity --list --hide-header --column=列名123

f:id:ytyaru:20190312173343p:plain

--text

 デフォルト表示の一部を変更する。

zenity --list --hide-header --text "選択してください。" --column=列名123

f:id:ytyaru:20190312173347p:plain

  • --hide-textコマンドが欲しかった
  • --titleコマンドが欲しかった(タイトルバーのテキスト変更)

複数の列

zenity --list \
--column=列名A --column=列名B --column 列名C \
値A1 値B1 値C1 \
値A2 値B2 値C2 \

f:id:ytyaru:20190312161802p:plainf:id:ytyaru:20190312161807p:plain

 TSVで書くと以下。

列A 列B    列C
値A1   値B1   値C1
値A2   値B2   値C2
  • 選択した行の1列目が返ってくる

--checklist

$ zenity --list --checklist --column check --column 列名 TRUE 値1 FALSE 値2 TRUE 値3

f:id:ytyaru:20190312162839p:plain

 3列目以降はつくれない。

 また、以下のような問題点がある。

  • フォーカス表示されない(背景青色にならない)
  • チェックボックスをクリックする必要がある(隣の列をクリックしてもチェックされない)

 特にフォーカスが表示されないのが致命的。チェックリストとして使い物にならないレベル。

--radiolist

$ zenity --list --radiolist --column check --column 列名 TRUE 値1 FALSE 値2 FALSE 値3

f:id:ytyaru:20190312163541p:plain

--imagelist

$ zenity --list --imagelist --column img img1.png img2.png  img3.png ...
$ find /usr/share/icons/PiX/32x32/actions -maxdepth 1 -type l -o -type f | zenity --list --imagelist --column img 

f:id:ytyaru:20190312165206p:plain

  • タイル形式に並べるようにできたら良かったのに
  • Grid形式でファイルサイズなど表示できれば良かったのに

選択

--multiple

  • Ctrlキー+クリックで複数行選択できる
  • 区切り文字: |
$ zenity --list --multiple --column=列名A --column=列名B --column 列名C 値A1 値B1 値C1 値A2 値B2 値C2 値A3 値B3 値C3  
値A1|値A3

f:id:ytyaru:20190312165908p:plain

--separator

 区切り文字を変更する。

$ zenity --list --multiple --separator "\n" --column=列名A --column=列名B --column 列名C 値A1 値B1 値C1 値A2 値B2 値C2 値A3 値B3 値C3
値A1
値A3
$ $ zenity --list --multiple --separator "\t" --column=列名A --column=列名B --column 列名C 値A1 値B1 値C1 値A2 値B2 値C2 値A3 値B3 値C3
値A1   値A3

戻り値

$ zenity --list --column No --column code --column name 0 en 英語 1 ja 日本語
0
  • 選択した行の一列目が返る

f:id:ytyaru:20190312172657p:plain

--print-column

 指定した列を返す。(デフォルトは1

$ zenity --list --print-column=2 --column No --column code --column name 0 en 英語 1 ja 日本語
en

--hide-column

 指定した列を非表示にする。

$ zenity --list --hide-column 1 --print-column=2 --column No --column code --column name 0 en 英語 1 ja 日本語
en

f:id:ytyaru:20190312172953p:plain

編集

--editable

$ zenity --list --text 選択してください。 --editable --column=列名123

f:id:ytyaru:20190312171207p:plainf:id:ytyaru:20190312171215p:plain

 編集させる意味がわからない。何が嬉しいの? 編集した項目を戻り値として受け取れるが、選択する必要がある。選択しなかったら編集した値は取得できない。まとめて編集できるメリットがあるUIなのに、選択しないとデータを受け取れない。一体どんな場面で使うのか謎。

 ファイルと紐付けてデータバインディングできたら有意義だった。特にTSV編集できたらよかったのに。

前回まで

対象環境

  • Raspbierry pi 3 Model B+
  • Raspbian stretch 9.0 2018-11-13
  • bash 4.4.12
  • zenity 3.28.1
$ uname -a
Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux