Gtk3 / Gnome 3彩色按钮:适用"。需要注意" CSS样式

时间:2017-12-14 00:24:41

标签: python button gtk3 gnome gnome-3

前言

在gnome 3应用程序中,某些按钮通过着色背景突出显示,而不是普通按钮的灰色。使用标准Adwaita主题时,这些按钮的颜色不同,但也可以在各种其他主题中实现。以下是Adwaita和Flat Plat主题的普通按钮和彩色按钮的示例。

阿德维塔

Adwaita normal Adwaita needs-attention

Flat Plat

Flat Plat normal Flat Plat needs-attention

现在问题

我希望能够实现这些"重要按钮"在我的Gtk3应用程序中。在研究如何做到这一点时,我在主题文件中发现了这些"重要按钮"有一个名为needs-attention的特殊CSS类。然后我尝试将我的按钮的CSS类设置为needs-attention。然而,这并没有奏效。我还有一个灰色的标准按钮。为了演示我做了什么,我附加了一个最小的脚本和正在运行的程序的屏幕截图。 "重命名"按钮应突出显示,就像上面的屏幕截图一样。我该怎么做?

我的代码

Screenshot of script

#!/usr/bin/env python3

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class ButtonWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="Needs Attention Button")
        self.set_border_width(10)

        hbox = Gtk.Box(spacing=6)
        self.add(hbox)

        button = Gtk.Button.new_with_label("Remove")
        hbox.pack_start(button, True, True, 0)

        button = Gtk.Button.new_with_mnemonic("Rename")
        button.get_style_context().add_class("needs-attention")
        hbox.pack_start(button, True, True, 0)

win = ButtonWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

2 个答案:

答案 0 :(得分:1)

似乎所有我错的是我使用了错误的CSS类。正确的是suggested-action而不是needs-attention。如果我在原始代码中替换该字符串,我将得到以下正确结果:

enter image description here

答案 1 :(得分:1)

GNOME的Adwaita主题已为预建的操作预定义了两个类:

  • suggested-action
  • destructive-action

您可以在GNOME Wiki HowDoI/Buttons上阅读:

  

虽然大多数按钮都是灰色的,但它变得更加时尚   强调按钮是建议的动作,给他们一个   不同的颜色。在Adwaita主题中,颜色为蓝色。 ...   最近,添加了另一个危险行为的样式类   好吧:'破坏性行动'。 Adwaita主题使用红色按钮   标记为。

在Adwaita上他们分别看起来像这样:

  • enter image description here
  • enter image description here

预定义的needs-attention类,它是一个Gtk.Stack / GtkStack子属性,它在Gtk.StackSwitcher中呈现,以引起用户注意,如GtkStack API Reference中所述:

  

“需要注意”的子属性

“needs-attention”          gboolean
     

设置一个标志,指定子项是否需要用户注意。   GtkStackSwitcher使用它来改变外观   页面需要注意时的相应按钮,而不是   现在的。

可以在gtk3-widget-factory程序中看到由此产生的视觉辅助,作为需要注意的孩子的蓝点(假设Adwaita主题):

enter image description here