【问题标题】:How to copy the GTK style of a widget and apply it to another?如何复制一个小部件的 GTK 样式并将其应用到另一个?
【发布时间】:2013-12-10 22:29:09
【问题描述】:

我当前的 GTK 弹出窗口如下所示 - 请注意,它采用深色氛围颜色主题。

在 GTK3.8 及更高版本中,有 GTKMenuButtons - 弹出窗口看起来像这样 - 注意它看起来像使用按钮样式提示。

我喜欢这种风格,我希望我的应用程序弹出窗口看起来一样,以便有更好的外观 - 集成和感觉。

我知道我可以使用这个 python 代码的 sn-p 覆盖弹出窗口的背景颜色:

样式 = button.get_style_context() 颜色 = style.get_background_color(Gtk.StateFlags.NORMAL) popup_menu.override_background_color(Gtk.StateFlags.NORMAL,颜色)

如果我应用按钮背景颜色,它看起来像这样。

我不知道如何将按钮字体颜色应用于弹出窗口。

更重要的是,还有恼人的黑色边框 - 1px 宽?

因此对于我的问题 - 我是在尝试正确的方式(覆盖主题属性)还是我可以以某种方式将一个小部件(按钮或按钮弹出窗口)的 CSS 样式应用于弹出窗口,以便我可以模仿菜单按钮弹出样式?

更多信息 - GTKMenuButton 源 gtkmenubutton.c 没有任何用于弹出窗口的主题控件,因此我不知道菜单按钮弹出窗口如何获得其主题。

【问题讨论】:

    标签: css gtk themes


    【解决方案1】:

    经过进一步调查,我发现小部件(或容器)的样式类会影响嵌入对象的整体样式。

    让我用一个例子进一步解释:

    构造一个网格并附加包含弹出菜单的 MenuButton。

    将工具栏样式类添加到网格会影响该网格中的所有对象,包括弹出窗口。

    style = grid.get_style_context()
    style.add_class(Gtk.STYLE_CLASS_TOOLBAR)
    

    结果是这样的:

    从 gi.repository 导入 Gtk 类 MenuExampleWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="菜单示例") self.set_default_size(200, 200) 网格 = Gtk.Grid() grid.insert_column(0) 菜单 = Gtk.Menu() mitem1 = Gtk.MenuItem(label = "Item 1") mitem2 = Gtk.MenuItem(label = "Item 2") menub = Gtk.MenuButton(label='menu') menub.set_popup(菜单) menub.set_align_widget(无) menub.show_all() menu.append(mitem1) menu.append(mitem2) menu.attach_to_widget(菜单,无) menu.show_all() 样式 = grid.get_style_context() style.add_class(Gtk.STYLE_CLASS_TOOLBAR) grid.attach(菜单,0,0,1,1) self.add(网格) 窗口 = MenuExampleWindow() window.connect("删除事件", Gtk.main_quit) window.show_all() gtk.main()

    【讨论】:

      【解决方案2】:

      假设你使用 gtk3+

      gtk_widget_get_style/gtk_widget_get_modifier_stylegtk_widget_set_style/gtk_widget_modify_style 应该做你想做的事。请注意,应用样式有一个内置优先级,您无法修改(请参阅上述函数的 DocBook 条目)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-24
        • 1970-01-01
        • 2014-04-23
        • 2018-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多