无法将CSS应用于GtkEntry窗口小部件(GTK3 / gi / Python)无效

问题描述 投票:0回答:3

我一直无法弄清楚我在做什么错。我敢肯定这很简单,但是却让我逃脱了。即使在以下示例中,我也无法正常工作。我似乎无法在单个GtkWindow中将CSS样式应用于GtkEntry小部件。我只是想将输入框的背景设为红色。

我审阅的所有内容以及我看到的示例都如下所示,似乎没有其他人感到困惑。

这是我的Python:

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

builder = Gtk.Builder()
builder.add_from_file("entry.glade")

window = builder.get_object('window1')
window.connect('destroy', Gtk.main_quit)

css = "#red { background-image: linear-gradient(red); }"
provider = Gtk.CssProvider()
provider.load_from_data(css)
Gtk.StyleContext().add_provider_for_screen(Gdk.Screen.get_default(), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)

entry = builder.get_object('entry1')
entry_style_context = entry.get_style_context()
entry_style_context.add_class("red")

window.show_all()

Gtk.main()

这是Glade XML:

<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <requires lib="gtk+" version="3.0"/>
  <!-- interface-naming-policy project-wide -->
  <object class="GtkWindow" id="window1">
    <property name="can_focus">False</property>
    <child>
      <object class="GtkVBox" id="vbox1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <child>
          <object class="GtkEntry" id="entry1">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="invisible_char">●</property>
            <property name="primary_icon_activatable">False</property>
            <property name="secondary_icon_activatable">False</property>
            <property name="primary_icon_sensitive">True</property>
            <property name="secondary_icon_sensitive">True</property>
          </object>
          <packing>
            <property name="expand">True</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

如果我将CSS设置为.entry { background-image: linear-gradient(red); },则可以使用,但是所有GtkEntry框都将变成红色(我不想要)。

我到底想念什么?

python css gtk3 glade
3个回答
0
投票

好吧,有了新的想法,再看一遍,我想我已经明白了。我不确定为什么它会这样工作,但是希望有人比我聪明。

出于任何原因,我都需要以点表示法指定小部件类型和类名,因为哈希表示法无法像CSS / HTML领域所期望的那样工作。

此操作NOT

起作用:css = "#foo { background-image: linear-gradient(red); }

DOES

作品:css = "entry.foo { background-image: linear-gradient(red); }

我已经通过向Glade添加第二个输入框并执行以下操作来验证这一点:

css = """
.entry.red { background-image: linear-gradient(red); }
.entry.blue { background-image: linear-gradient(blue); }
"""
provider = Gtk.CssProvider()
provider.load_from_data(css)
Gtk.StyleContext().add_provider_for_screen(Gdk.Screen.get_default(), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)

builder.get_object('entry1').get_style_context().add_class("red")
builder.get_object('entry2').get_style_context().add_class("blue")

现在我有一个红色和一个蓝色输入框。


0
投票

[在常规浏览器CSS中,#foo指代ID为foo的HTML元素(用id="foo"设置),.foo指代样式类的元素(例如class="foo"设置) ,或多个类别,例如class="foo bar"。]


0
投票

问题

© www.soinside.com 2019 - 2024. All rights reserved.