为什么 css 样式在 GtkButton 上不起作用?


请原谅我的英语。

我试图使用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;
}

参赛作品效果很好。。。bg颜色发生变化。但是按钮没有,也没有错误消息。

EDIT3:(删除预览编辑并更改一些标记(正在摘要 我试图用我在网上找到的所有Python、C和C++代码更改按钮颜色,但没有成功。我阅读了我找到的所有教程和GTK+3参考手册。在那之后,我所知道的就是问题是关于Kubuntu主题的:如果我将GTK主题从‘oxygen-GTK’更改为’default'(在GTK配置中(,这是我发现代码运行良好的唯一方法,但这不是我的想法,按钮看起来很糟糕。

因此,问题是:

  1. 为什么我不能更改按钮的背景色
  2. 为什么我只有按钮有这个问题?(与其他小部件配合良好(
  3. 我在这里和GTK论坛上得到了答案,说这不是改变按钮颜色的好方法,但是。。。如果我想要一个像这个图片(链接(中的菜单(请参阅红色框按钮(,该怎么办?Wich是最好的做法吗

谢谢和问候!

我知道这已经很老了,但在最初的几个谷歌结果中出现了,所以我想分享一下我的经验。

Gtk。Button有一个内联Gtk。按钮文本的标签,默认情况下不会从按钮继承,所以你必须明确地告诉它(或者只指定其中的颜色(:

GtkButton GtkLabel {
    color: #fff; /* This changes the text color in the button */
}

至于@sciamp的答案,GTK主题也为背景和边界设置了一个图像,所以你必须用background-image: none; border-image: none;手动删除它。希望这能省去麻烦。

这应该有效(我的意思是它对我有效!(:

GtkButton {
  border-image: none;
  background-image: none;
  background-color: green;
}

这很复杂,但我认为不能直接完成。

我相信最核心的原因是按钮没有渲染背景。它所做的只是在其区域周围渲染一个帧,然后渲染其中的任何子帧。请记住,GtkButton是一个容器,它通常为文本标签保存GtkLabel,但可以保存任何小工具。

我已经设法改变了文本标签的背景色,但只有文本周围的老虎框会受到影响,这不是你想要的。

间接的解决方案是将GtkButton子类化,以创建一个实际呈现其背景的变体。可以肯定的是,这对主题来说是相当粗鲁的,应该避免。

相关内容

  • 没有找到相关文章

最新更新