You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CSS修改Gtk.Entry文本颜色?替代已废弃的override_color

用CSS修改Gtk.Entry文本颜色的实现方案

由于override_color已被废弃,Gtk3+及以上版本推荐使用CSS来定制控件样式。以下是修改后的代码,实现点击按钮切换Gtk.Entry的文本颜色:

import Gtk

class Entry(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.connect("destroy", Gtk.main_quit)

        self.entry = Gtk.Entry()
        # 初始化CSS提供者与样式上下文
        self.css_provider = Gtk.CssProvider()
        self.entry_style_ctx = self.entry.get_style_context()
        # 将CSS提供者绑定到Entry,优先级设为USER以覆盖默认样式
        self.entry_style_ctx.add_provider(self.css_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER)

        self.button = Gtk.Button(label='切换文本颜色')
        self.button.connect('clicked', self.change_color)
        self.is_red = False  # 标记当前颜色状态

        box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
        box.add(self.entry)
        box.add(self.button)

        self.add(box)

    def change_color(self, widget):
        if self.is_red:
            # 清空自定义CSS,恢复默认文本颜色
            self.css_provider.load_from_data(b"")
        else:
            # 加载红色文本的CSS规则
            self.css_provider.load_from_data(b"entry { color: red; }")
        self.is_red = not self.is_red

window = Entry()
window.show_all()
Gtk.main()

关键实现说明

  • CSS提供者:使用Gtk.CssProvider加载CSS规则,这是Gtk官方推荐的样式定制方式
  • 样式上下文:通过get_style_context()获取Entry的样式上下文,将CSS提供者添加进去并设置优先级为USER,确保自定义样式能覆盖系统默认样式
  • 动态切换:在change_color方法中,通过load_from_data动态加载不同的CSS规则,实现点击按钮切换文本颜色的效果

更灵活的类名切换方式

如果需要管理多个样式,推荐用添加/移除CSS类的方式实现:

修改__init__中的CSS加载代码:

# 预先定义红色文本的CSS类
self.css_provider.load_from_data(b".red-text { color: red; }")

修改change_color方法:

def change_color(self, widget):
    if self.is_red:
        self.entry_style_ctx.remove_class("red-text")
    else:
        self.entry_style_ctx.add_class("red-text")
    self.is_red = not self.is_red

这种方式可以轻松扩展更多样式类,比如添加蓝色、绿色文本的类,只需修改CSS和切换类名即可。

内容的提问来源于stack exchange,提问作者user_968563

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:15:41