如何在Python3中更改Gtk3 Entry文本颜色?

时间:2013-03-06 11:16:47

标签: python gtk3 python-3.2

我的应用程序中有Gtk.Entry()列表,我想更改其中一些文本的颜色。

我尝试了以下内容:

#!/usr/bin/python3
# Filename: mywindow.py

from gi.repository import Gtk
from gi.repository import Gdk

class MyWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="My window")

        self.mainGrid = Gtk.Grid()
        self.add(self.mainGrid)

        self.myOkEntry = Gtk.Entry()
        self.myOkEntry.set_text("This is OK (green)")
        self.myOkEntry.override_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0.0, 1.0, 0.0, 0.0))

        self.mainGrid.add(self.myOkEntry)

mainWin = MyWindow()
mainWin.connect("delete-event", Gtk.main_quit)
mainWin.show_all()

Gtk.main()

但后来文字是看不见的。我尝试了Gdk.RGBA的不同值,从0.0到1.0,从0到65000,它是相同的。 另一个测试:

print(Gdk.color_parse("green"))

打印:

<Gdk.Color(red=0, green=65535, blue=0)>

所以我试过了:

print(Gdk.RGBA(Gdk.color_parse("green")))

但是:

File "/usr/lib/python3/dist-packages/gi/overrides/Gdk.py", line 55, in __init__
    self.red = red
TypeError: argument 2: Must be number, not Color

我有点困惑。 我使用的文件主要是:
https://python-gtk-3-tutorial.readthedocs.org/en/latest/
https://developer.gnome.org/gtk3/stable/

我找到了一些关于CSS样式的文档,我可以使用它:

GtkEntry {
    color: #000000
}
GtkEntry#ok {
    color: #00cc00
}
GtkEntry#error {
    color: #cc0000
}

比如HTML?此文档已在之前关于Python3/Gtk3 Entry color

的问题中进行了链接

好吧,我的问题是:如何在不修改其他人的颜色的情况下更改一个Gtk.Entry()的文本颜色?

2 个答案:

答案 0 :(得分:4)

将Alpha通道设置为1.0:

self.myOkEntry.override_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0.0, 1.0, 0.0, 1.0))

答案 1 :(得分:1)

您可以将gtk.Widget.modify_fg(Widget作为gtk.Entry的基类之一)与color_parse逻辑一起使用,如下所示:

self.myOkEntry.modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("green"))