我试图以禅宗的方式做一些事情,但这让我发疯。为了说明我的问题,请尝试运行以下命令:
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-wrap
到zenity
似乎可以修复它。
编辑#1
经过更多测试,这似乎是一个zenity
错误。
如果使用文本换行(zenity
默认情况下使用),则似乎根据最小窗口宽度设置窗口高度,文本换行使该尺寸更高。但是,生成的对话框要宽得多,导致文本换行更短,从而导致窗口对于文本来说太高。
存在两种解决方法
添加
--no-wrap
以关闭换行。如果您的文本不太宽,您可以使用它,但是如果它太宽,对话框对于屏幕来说将太宽,并且如果文本是硬编码的,您可能必须创建新行以手动换行。如果文本是从某处自动生成的,那么您可能需要查看命令fold
以使文本适合。改变
--warning
--info
和--error
到--question
.由于某种原因,问题似乎不受此影响,并且对话框大小更加合理。这里的问题是,将出现一个带有问题图标的错误对话框。此外,您还会看到“是”和“否”按钮,而不仅仅是“确定”按钮。
答案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."
.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
使用我们的.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."
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:
答案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."
附言。我改进了我的解释并替换了示例,因为它不是从终端运行的(不过它从脚本运行得很好)。
答案4
我发现同时指定 --width 和 --height 可以使其工作。单独指定 --width 不起作用。