Zenityダイアログウィンドウの高さが高すぎるため、サイズを変更できません。エラーを解決した人はいますか?

Zenityダイアログウィンドウの高さが高すぎるため、サイズを変更できません。エラーを解決した人はいますか?

私は禪の方法で仕事をしようとしていますが、それは私を狂わせます。私の問題を説明するには、次のコマンドを実行してみてください。

zenity --info --text "Hello there friends."

十分簡単です。今これを試してみてください:

zenity --info --text " Hello there friends. Hello there friends. Hello there friends. Hello there friends."

ダイアログボックスがかなり大きくなっていることを確認してください。

したがって、ダイアログボックスの幅を調整できます。特に幅をできるだけ小さくしようとすると、何が起こるかを確認してください。これは次の点を説明します。高さを下向きにまったく調整できません。ダイアログボックスができるだけ小さいサイズに水平に圧縮されている場合は、必要な高さに基づいて厳密な最小値があるようです。

短いメッセージにはこれらすべてが重要ではありませんが、長いメッセージがある場合はどうなりますか?確認ボタンが画面から消えるほどダイアログボックスが大きくなるために多くの入力を行う必要はありません。これはユーザーにとって大きな問題です。

バグレポートは次のとおりです。FS#34164:[zenity] - 無効なダイアログサイズ https://bugs.archlinux.org/task/34164

しかし、そのパッチは私には役に立ちませんでした。私のエンドユーザーは自分のコンピュータにZenityをインストールしましたが、私はZenityにパッチを適用できません。

この問題を解決する方法はありますか?執筆に関するアドバイスやその他のアドバイスはありますか?

答え1

追加する--no-wrapzenity解決されるようです。

編集#1

もっとテストした結果、これはzenityバグのようです。

zenityテキストの折り返し(デフ​​ォルトで行われます)を使用すると、ウィンドウの高さが最小ウィンドウ幅に基づいて設定され、テキストの折り返しによってそのサイズが大きくなるようです。ただし、結果のダイアログボックスがはるかに広くなり、テキストの折り返しが短くなり、ウィンドウの長さがテキストと比較して大きくなりすぎます。

2つの解決策があります

  1. --no-wrap改行をオフにするために追加されました。テキストが広すぎない場合はこれを使用できますが、広すぎるとダイアログボックスが画面に比べて広すぎてテキストがハードコードされている場合は、手動で改行する新しい行を作成する必要があります。テキストがどこかで自動的に生成された場合は、foldテキストに合わせるためにコマンドを確認する必要があります。

  2. 何らかの理由で問題はこれに影響されないように見え、ダイアログボックスのサイズがより合理的--warning --infoです--error--questionここで問題は、質問アイコンとともにエラーダイアログボックスが表示されることです。また、「OK」ボタンの代わりに「はい」ボタンと「いいえ」ボタンが表示されます。

答え2

また、サイズをデフォルト値以下に減らす方法も見つかりませんでした。gxmessage一度試してみることもできます。縮小できますが、縮小できる最小サイズもあります。zenity私の考えでは、フォントサイズの選択とウィンドウサイズよりも優れた制御インターフェースがあると思います。

はい

$ gxmessage -center -timeout 60 -font "monospace 9" -buttons "Okay":1 
    -geometry 300x50 --wrap \
    " Hello there friends. Hello there friends. Hello there friends. Hello there friends."

                                       gxmessage SS

.gtkrc-2.0

GTK +アプリケーションの外観を本当に制御したい場合は、リソースファイルを使用するのが適切な方法だと思います$HOME/.gtkrc-2.0。ここでは、固定幅フォントをオーバーライドするためにフォントなどの項目を追加できます。実験目的のためにコピーを作成し、.gtkrc-2.0名前を.gtkrc-20.mono8

次のコマンドは、デフォルトフォントを固定幅フォント8にします。

# $HOME/.gtkrc-2.0.mono8
style "font" {
 font_name = "monospace 8"
}
widget_class "*" style "font"
gtk-font-name = "monospace 8"

これにより、GTK +アプリケーションがそのファイルを使用するかどうかを次のように制御できます。

$ GTK2_RC_FILES=.gtkrc-2.0.mono8 <gtk app>

したがって、zenityここではデフォルト値が使用されます。

                    デフォルトのzenity rcファイル

これはリソースファイルをzenity使用しています.gtkrc-2.0.mono8

                  mono8ジェニティrcファイル

メモ:上記で使用したコマンドは次のとおりです。

$ GTK2_RC_FILES=.gtkrc-2.0.mono8 zenity --info --title="Status" --text \
    "Hello there friends. Hello there friends. Hello there friends."

GTK寄生虫

.gtkrc-2.0したがって、このファイルを使用してGTK +アプリケーションを制御できますが、このファイルにどのオプションを入れることができるかを知ることができます。さて、この問題を解決するアプリがあります。 8-)GTK寄生虫。私のFedoraリポジトリにgtkparasite

インストールしたら、次のようにGTK +アプリケーションを呼び出すことができます。

$ GTK_MODULES=gtkparasite <gtk app>

それでは、次のように電話してみましょうzenity

$ GTK_MODULES=gtkparasite zenity --info --title="Status" --text \
    "Hello there friends. Hello there friends. Hello there friends."

一部のサブコンポーネントの間隔を変更してアイコンを非表示にすると、zenityサイズを440x65に縮小できます。

                  リトルジェンSS

答え3

これは古いバグのようですが、このバグが修正されたかどうかはわかりません。ただし、Linux Mint 17.1ではまだこの問題が発生します。しかし、私は私に効果があり、他の人にも効果があるかもしれない解決策を見つけました。

オプションは--no-wrap問題に対する解決策です(前述のように)。--widthおよびオプションを省略する--heightか、必要な最小値に設定してください。次にオプションを追加します--no-wrap。次に、改行(文章)を希望の場所に使用します\n。ポップアップウィンドウの幅は、最も長い文章に合わせて自動的に調整されます。\n\n空白行を作成するために使用されます。

例は次のとおりです。

zenity --warning --title="Zenity | Workaround excessive height" --width=100 --height=100 --no-wrap --text="<big><b>Zenity problem:\n Excessive height with long text.</b></big>\n\nSomehow Zenity's option '<b>--height</b>' doesn't seem to do the job.\nHowever, this doesn't have to spoil your fun! Omit the '<b>--width</b>'\nand '<b>--height</b>' option or set it to the minimum value you require.\nAnd add the '<b>--no-wrap</b>' option. Now use '<b>\\\n</b>' wherever you want\nto break the line (sentence). The width of the popup will adjust\nitself to the longest sentence."

PS。説明を改善し、端末で実行されないため、例を置き換えました(ただし、スクリプトでは正しく実行されます)。

答え4

--widthと--heightの両方を指定すると機能することがわかりました。 --width だけを指定しても効果はありません。

関連情報