Zenity 对话窗口的高度过高,无法调整大小。错误解决方法有人吗?

Mou*_*inX 5 bash zenity

我正在尝试在 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-wrapzenity似乎可以解决它。

编辑#1

经过更多测试,它似乎是一个zenity错误。

如果使用文本环绕(zenity默认情况下使用它),它似乎根据最小窗口宽度设置窗口高度,文本环绕使该尺寸更高。但是,生成的对话框要宽得多,导致文本换行更短,从而导致窗口对于文本而言太高。

存在两种解决方法

  1. 添加--no-wrap以关闭环绕。如果您的文本不太宽,您可以使用它,但是如果它太宽,对话框对于屏幕来说会太宽,如果文本是硬编码的,您可能需要创建新的行来手动换行。如果文本是从某处自动生成的,那么您可能需要查看fold命令以使文本适合。

  2. 改变--warning --info--error--question。出于某种原因,问题似乎不受此影响,而且对话框的大小要理智得多。这里的问题是会出现一个带有问题图标的错误对话框。此外,您将看到“是”和“否”按钮,而不仅仅是“确定”按钮。


slm*_*slm 5

我也没有想出一种方法来减少它的大小低于默认值。您可能想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)

                                       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"
Run Code Online (Sandbox Code Playgroud)

然后你可以控制这个文件是否被 GTK+ 应用程序使用,如下所示:

$ GTK2_RC_FILES=.gtkrc-2.0.mono8 <gtk app>
Run Code Online (Sandbox Code Playgroud)

所以这里zenity使用默认值:

                    默认 zenity rc 文件

这是zenity使用我们的.gtkrc-2.0.mono8资源文件:

                  mono8 zenity rc 文件

注意:上面使用的命令是这样的:

$ 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)

gtk-寄生虫

所以你可以看到我们可以通过.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:

                  ss of little zenity