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

2024-09-29 17:23:02 发布

您现在位置:Python中文网/ 问答频道 /正文

请原谅我的英语。在

我试图用css文件更改GtkButton的背景色,但我做不到。 我试了几个我在网上找到的例子,但都没用。 我贴了两个例子。一个用python3.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()

以及样式.css在

^{pr2}$

参赛作品效果很好。。。背景颜色改变。但是按钮没有,没有错误信息。在

EDIT3:(已删除预览编辑并更改一些标记) 总结…我尝试用我在Web中发现的所有python、c和C++代码来更改按钮颜色。我阅读了我找到的所有教程和GTK+3参考手册。 之后我只知道问题出在Kubuntu主题上:如果我将GTK主题从'oxygen-GTK'更改为“default”(在GTK配置中),这是我发现代码运行良好的唯一方法,但这不是想法,而且按钮看起来很糟糕。在

所以,问题是:

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

谢谢和问候!在


Tags: selfaddtruegtkforget按钮css
3条回答

这应该行得通(我的意思是对我有用!)公司名称:

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

我知道这很古老,但是在最初的几个google搜索结果中就出现了,所以我想分享一下我的经验。在

在Gtk.按钮具有内联Gtk.标签对于按钮文本,默认情况下不会从按钮继承,因此必须显式地告诉它(或只指定其中的颜色):

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

至于@sciamp的答案,GTK主题也为背景和边框设置了一个图像,因此您必须手动删除它,并使用background-image: none; border-image: none;希望这可以节省某人的麻烦。在

这很复杂,但我不认为可以直接做到。在

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

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

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

相关问题 更多 >

    热门问题