如何用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
相关产品推荐
相关产品推荐

