1

私は解決できないゼニティに問題があります。皆さん、私を助けてくれませんか?

7 行の tmp3 ファイルがあります。

AAA
BBB
...
FFF
GGG

このファイルをzenity経由で送信して、必要なすべての組み合わせで必要なすべての行をチェックできるチェックリストを表示したいと考えています。

私は以前に書いた:

cat tmp3 | zenity --list \
                  --column='#' \
                  --text "Select playlist from the list below" \
                  --title "Please select one or more playlists" \
                  --multiple \
                  --width=300 \
                  --height=300 \
                  --checklist \
                  --column "Select" \
                  --separator="/ ")

これは、tmp3 の 7 つのファイルすべてで zenity に 1 つの行を作成するだけです。それは私が欲しいものではありません。

私は現在これを書きました:

choice=$(zenity --list \
                --column "Playlists" FALSE $(cat tmp3) \
                --text "Select playlist from the list below" \
                --title "Please select one or more playlists" \
                --multiple \
                --width=300 \
                --height=300 \
                --checklist \
                --column "Select" \
                --separator="/ ")

ここで、私には理解できない本当に奇妙なことが起こります。7 つのフィールドのうち 4 つが zenity で作成されます: AAA CCC EEE と GGG。しかし、他のものではありません。デバッグ用に -x を設定すると、7 行すべてが zenity にパイプされていることがわかります...何が起こっているのですか?????

現在のフォルダー (たまたま tmp3 の行とまったく同じ名前) にある 7 つのサブフォルダーを一覧表示することで、別の解決策を試しました。同じことが起こります!:

私はこれを書きました:

choice=$(zenity --list \
                --column "Playlists" FALSE $(ls -d -1 */) \
                --text "Select playlist from the list below" \
                --title "Please select one or more playlists" \
                --multiple \
                --width=300 \
                --height=300 \
                --checklist \
                --column "Select" \
                --separator="/ ")

2 番目の解決策は簡単に思えますが、私のスキルはあまり高くありません。そして、後者のソリューションと、それがなぜこれを行うのかを理解したいと思います。

君たちありがとう!

編集:私はこれを見つけて、自分のやり方で機能させようとしましたが、これまでのところ成功していません... http://www.linuxquestions.org/questions/programming-9/reading-lines-to-an-array-and-生成-動的-zenity-リスト-881421/

4

5 に答える 5

1

私はちょっと遅れていることを知っていますが、ほぼ同じことを望んでいて、最終的にそれを理解しました. 私のソリューションは検索を行い(エラーを隠します)、各結果にTRUEと改行を追加し(それが鍵でした!)、結果をzenityに送信します:

CHECKED=`find /music/folder -name "*.mp3" -type f 2>/dev/null | \
         awk '{print "TRUE\n"$0}' | \
         zenity --list --checklist --separator='\n' --title="Select Results." \
                --text="Finding all MP3 files..." --column="" --column="Files"`

あなたの状況では、これは次のようになるはずです:

CHECKED=`cat tmp3 | awk '{print "TRUE\n"$0}' | zenity --list --checklist \
         --separator='/ ' --title="Select Results." \
         --text="Finding all MP3 files..." --column="" --column="Select"`

したがって、Zenity は各改行を列に入れ、そのようにリストを埋めているようです。これは、Zenity に入る文字列を操作して、任意の数の列を追加できることを意味します。

于 2013-11-29T21:06:37.787 に答える
0

短く明確に要約すると、次の 2 つのオプションがあります。

オプション 1: 入力ファイル、列を改行で区切る

それ以外の

cat tmp3 | zenity ... ...

行う:

sed 's/^/.\n/' tmp3 | zenity ... ...

オプション 2:インライン コマンド、列はコマンド引数からペアとして読み取られます

それ以外の

cat tmp3 | zenity ... ...

行う:

zenity ... ... `sed 's/^/. /' tmp3`
于 2014-12-13T11:07:05.373 に答える
0

に興味深い例がありman zenityます:

zenity \
    --list \
    --checklist \
    --column "Buy" \
    --column "Item" \
    TRUE Apples \
    TRUE Oranges \
    FALSE Pears \
    FALSE Toothpaste

ニューロンをオンにして少し適応させるだけです =)

あなたはそれを行うことができます

編集

未定義の長さリストがある場合、この例はより興味深いものになります:

find . -name '*.h' |
zenity \
    --list \
    --title "Search Results" \
    --text "Finding all header files.." \
    --column "Files"
于 2013-02-19T22:38:52.053 に答える