我正在尝试在 zenity 中做一些事情,这让我发疯。为了说明我的问题,请尝试运行:
zenity --info --text "Hello there friends."
Run Code Online (Sandbox Code Playgroud)
够简单了吧。现在试试这个:
zenity --info --text " Hello there friends. Hello there friends. Hello there friends. Hello there friends."
Run Code Online (Sandbox Code Playgroud)
请注意对话框是如何变得更高的?
所以你可以调整对话框的宽度。特别要注意当您尝试使宽度尽可能小时会发生什么。这说明了我的下一点:您根本无法向下调整高度的大小——它似乎有一个硬最小值,它基于如果您的对话框被水平挤压到可能的最小尺寸所需的高度。
这些对于短消息都不重要,但是如果您有长消息怎么办?您不必进行太多的输入,就可以得到一个非常高的对话框,以至于确定按钮不在屏幕上——这对我的用户来说是一个大问题。
这是一个错误报告:FS#34164 : [zenity] - 对话框大小错误 https://bugs.archlinux.org/task/34164
但是那个补丁对我没有任何好处。我的最终用户正在他们自己的计算机上安装 Zenity,我无法修补他们的 Zenity。
有没有办法解决?关于文本或其他任何东西的任何技巧?
小智 7
添加--no-wrap
到zenity
似乎可以解决它。
经过更多测试,它似乎是一个zenity
错误。
如果使用文本环绕(zenity
默认情况下使用它),它似乎根据最小窗口宽度设置窗口高度,文本环绕使该尺寸更高。但是,生成的对话框要宽得多,导致文本换行更短,从而导致窗口对于文本而言太高。
添加--no-wrap
以关闭环绕。如果您的文本不太宽,您可以使用它,但是如果它太宽,对话框对于屏幕来说会太宽,如果文本是硬编码的,您可能需要创建新的行来手动换行。如果文本是从某处自动生成的,那么您可能需要查看fold
命令以使文本适合。
改变--warning
--info
和--error
到--question
。出于某种原因,问题似乎不受此影响,而且对话框的大小要理智得多。这里的问题是会出现一个带有问题图标的错误对话框。此外,您将看到“是”和“否”按钮,而不仅仅是“确定”按钮。
我也没有想出一种方法来减少它的大小低于默认值。您可能想gxmessage
尝试一下。它可以缩小,但它也有一个可以缩小到的最小尺寸。不过,zenity
与字体大小选择和窗口尺寸相比,它确实具有更好的控制面,IMO 。
$ 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."
Run Code Online (Sandbox Code Playgroud)
如果你真的想控制 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"
Run Code Online (Sandbox Code Playgroud)
然后你可以控制这个文件是否被 GTK+ 应用程序使用,如下所示:
$ GTK2_RC_FILES=.gtkrc-2.0.mono8 <gtk app>
Run Code Online (Sandbox Code Playgroud)
所以这里zenity
使用默认值:
这是zenity
使用我们的.gtkrc-2.0.mono8
资源文件:
注意:上面使用的命令是这样的:
$ GTK2_RC_FILES=.gtkrc-2.0.mono8 zenity --info --title="Status" --text \
"Hello there friends. Hello there friends. Hello there friends."
Run Code Online (Sandbox Code Playgroud)
所以你可以看到我们可以通过.gtkrc-2.0
文件来控制 GTK+ 应用程序,但是我们可以在这个文件中放什么选项。好吧,有一个 8-) 的应用程序,称为gtk-parasite。它在我的 Fedora 存储库中作为gtkparasite
.
安装后,您可以像这样针对 GTK+ 应用程序调用它:
$ GTK_MODULES=gtkparasite <gtk app>
Run Code Online (Sandbox Code Playgroud)
所以让我们调用zenity
:
$ GTK_MODULES=gtkparasite zenity --info --title="Status" --text \
"Hello there friends. Hello there friends. Hello there friends."
Run Code Online (Sandbox Code Playgroud)
如果您在某些子组件中更改间距并隐藏图标,则可以将zenity
尺寸缩小到 440x65: