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

4 投票
2 回答
4947 浏览
提问于 2025-04-17 18:07

我在我的应用程序里有一系列的 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 的问题中提到过 输入框颜色

那么,我的问题是:我怎么才能改变一个 Gtk.Entry() 的文字颜色,而不影响其他的呢?

2 个回答

2

你可以使用 gtk.Widget.modify_fg 方法(Widget 是 gtk.Entry 的一个基础类),结合你的颜色解析逻辑,像这样使用:

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

将透明度设置为1.0:

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

撰写回答