请原谅我的英语。
我正在尝试使用css文件更改GtkButton的背景颜色,但我无法做到。 我尝试了在网上找到的一些示例,但都没有起作用。 我发布两个示例。一个是Python 3.2.3,另一个是C 我正在使用Gtk+ 3.6和Kubuntu 12.10。
这是其中一个示例的代码:
from gi.repository import Gtk, Gdk
class MainWindow(Gtk.Window):
def __init__(self):
super().__init__()
vbox = Gtk.Box(spacing=10,orientation=Gtk.Orientation.VERTICAL)
self.add(vbox)
self.entries = [ Gtk.Entry() for i in range(3) ]
for e in self.entries:
vbox.pack_start(e, True, True, 0)
e.connect("changed", self.on_entry_changed)
e.set_text('123')
button=Gtk.Button(label='ok')
vbox.pack_end(button,True,True,0)
def on_entry_changed(self,entry):
ctx = entry.get_style_context()
if not entry.get_text().isnumeric():
ctx.add_class('invalid')
else:
ctx.remove_class('invalid')
cssProvider = Gtk.CssProvider()
cssProvider.load_from_path('style.css')
screen = Gdk.Screen.get_default()
styleContext = Gtk.StyleContext()
styleContext.add_provider_for_screen(screen, cssProvider,
Gtk.STYLE_PROVIDER_PRIORITY_USER) # With the others GTK_STYLE_PROVIDER_PRIORITY values get the same result.
window = MainWindow()
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()
以及style.css
GtkEntry.invalid {
background-color: #ffaaaa;
background: #ffaaaa;
}
GtkButton {
engine: oxygen-gtk; /*tried also with 'none' and without setting engine*/
background-color: green;
background: green;
}
这些条目的背景颜色改变得很好...但按钮没有变化,也没有错误信息。
编辑3:(删除之前的编辑并更改了一些标签)总结一下...我尝试使用在网上找到的所有Python、C和C++代码来更改按钮颜色,但都没有成功。我阅读了所有我找到的教程和GTK+ 3参考手册。在那之后,我所知道的是问题出在Kubuntu主题上:如果我将GTK主题从'oxygen-gtk'更改为'default'(在GTK配置中),这是我发现的唯一一个代码正常工作的方法,但这不是我的初衷,而且按钮看起来很难看。
因此,问题是:
- 为什么我无法更改按钮的背景颜色?
- 为什么只有按钮会出现这个问题?(其他小部件都正常工作)
- 我在这里和GTK论坛上得到答案,说更改按钮颜色不是一个好习惯,但是...如果我想要像这张图片中的菜单一样(链接)(看红框按钮)怎么办?最佳实践是什么?
谢谢和问候!
button.get_style_context().add_class("foo")
和button.foo
选择器在style.css中。 - Slazer