使用带有GTK+ 3.20的CSS文件为所有GtkTextView设置单一字体。

4

我正在使用GTK+开发一个C语言项目。

该项目最低要求为GTK+3.6。

我希望将所有的GTKTextView设置为等宽字体。在GTK更新到3.20之前,我的CSS样式表可以正常工作:

GtkTextView {
  font: Mono
}

现在,它不再起作用了。然而,glade有一个属性: <property name="monospace">True</property> 但是这个属性自GTK 3.16以来才存在,而debian stable使用的是GTK3.14。当然我希望它是可移植的。

我的问题是:我该怎么办?如何将所有的gtkTextView设置为等宽字体?


那个CSS是无效的。尝试用font: monospace;替换第二行。现在可以工作了吗?你也可以尝试将选择器改为textview。我需要查一下在GtkTextView上设置monospace属性有什么作用。设置一个设置字体的文本标签不是最佳选择的原因是什么? - andlabs
好的。非常感谢。我写了textview { font: monospace },它起作用了。非常感谢你,但是很抱歉我不理解你最后一个问题。 - lock
在 OS X 上会发生什么? - andlabs
这真的很奇怪。Pango在OS X上明确检查monospace并替换为"Courier"(参见pango/pangocoretext-fontmap.c)...如果你只指定"Courier"会发生什么?它还是不工作吗? - andlabs
不行,它不能运行 :( - lock
显示剩余2条评论
1个回答

4

GTK 3.20改变了CSS选择器的工作方式。

在GTK 3.20之前,以下内容是正确的:

GtkTextView {
    font-family: monospace;
}

从GTK 3.20开始,这是正确的:

textview {
    font-family: monospace;
}

如果您不确定特定平台,可以使用GTK Inspector检查所需的选择器:使用GTK_DEBUG=interactive运行应用程序,并按下Ctrl+Shift+D.

值得注意的是,在GTK 3.20之前的CSS选择器是实验性的,不打算成为稳定的API。

如果您必须支持两种形式,则最好的选择可能是创建两个样式表并根据GTK_MAJOR_VERSIONGTK_MINOR_VERSION的值之一加载一个或另一个。


感谢您的好解释。它在OS-X上不起作用,但我明白为什么它在Linux上不再起作用了。所以现在,在Linux上它可以正常工作。 - lock
你能在OSX上与检查员确认一下选择器有哪些问题吗? - ptomato
不,现在没事了。我已经重新安装了Gtk,现在它运行良好!!感谢您的宝贵帮助。现在我可以使用CSS样式表了。我的最后一个问题是如何在C代码中使用CSS:http://stackoverflow.com/questions/37250497/change-text-color-for-gtktoggletoolbutton-in-c-code-gtk3/37253231#37253231 - lock
@ptomato,GtkTextView, textview 不能与GTK+ CSS引擎一起使用吗? - andlabs
1
哦,那样做也可以,但不够明确,并且在您需要停止支持 < 3.20 的其他原因时会很麻烦解决。 - ptomato

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接