python - 为什么 css 样式不适用于 GtkButton?

标签 python css styles gtk gtk3

请原谅我的英语。

我正在尝试使用 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;
}

条目运行良好...背景颜色发生变化。但是 Button 没有,也没有错误消息。

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

那么,问题是:

  1. 为什么我不能更改按钮的背景颜色?
  2. 为什么只有按钮有这个问题? (适用于其他小部件)
  3. 我在这里和 GTK 论坛上得到的答案是改变按钮颜色不是一个好习惯,但是...如果我想要一个像这张图片中的菜单(link)(见红框按钮)怎么办? ?最好的做法是什么?

谢谢和问候!

最佳答案

我知道这已经很老了,但会出现在前几个谷歌搜索结果中,所以我想我应该分享我的经验。

Gtk.Button 有一个用于按钮文本的内联 Gtk.Label,默认情况下它不会从按钮继承,因此您必须明确告诉它(或只指定其中的颜色):

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

就@sciamp 的回答而言,GTK 主题还为背景和边框设置了图像,因此您必须使用 background-image: none; 手动删除它; border-image: none; 希望这可以帮助一些人摆脱困境。

关于python - 为什么 css 样式不适用于 GtkButton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14983385/

相关文章:

android - "You need to use a Theme.AppCompat theme (or descendant) with the design library"错误

css - 将 flexbox 元素与 block 中最后一个文本行的基线对齐

vb.net - 将两个 MsgBoxStyles 与 VB.NET 合二为一

python - 是否可以使用 openpyxl 将样式应用于整个工作表?

python - 在 Python 脚本中获取当前的 git 哈希

python - 在同一 df 中的 df col 行中仅选择一个值,以获取不同 val 的计算结果,并且一次仅对一个股票代码进行计算 df

python - 如何向热图单元格添加注释?

html - 禁用抗锯齿 Safari

css - 我想在单击列表项时隐藏 ul 项而不影响其功能!查看说明以获取更多信息

php - HTML + CSS 中的自动线条装饰