Ruby+Gtk开发:如何修改文本框选中高亮颜色为橙色?
解决Ruby Gtk文本框选中高亮颜色定制问题
嘿,我懂你想把Gtk Entry的选中文本高亮从默认蓝色改成橙色的需求,之前用modify_bg没效果太正常了——因为在Gtk3及之后的版本里,这种老旧的控件样式修改方法已经被CSS样式系统取代,主题和控件的样式大多通过CSS来管控,咱们换个正确的方式来实现:
用Gtk CSS Provider定制选中样式
Gtk提供了Gtk::CssProvider来加载自定义CSS,这是现在定制UI样式的标准做法,比老旧的modify_*方法更可靠、更灵活。下面是完整的示例代码:
require 'gtk3' app = Gtk::Application.new("com.example.CustomEntrySelection", :flags_none) app.signal_connect "activate" do |app| window = Gtk::ApplicationWindow.new(app) window.title = "自定义选中高亮色" window.set_default_size(350, 120) # 创建文本框 entry = Gtk::Entry.new entry.text = "选中这段文本,看看橙色高亮效果!" entry.margin = 20 # 创建CSS Provider并定义样式 css_provider = Gtk::CssProvider.new custom_css = <<-CSS /* 针对GtkEntry的选中状态设置样式 */ GtkEntry:selected { selection-background-color: #ff9900; /* 替换成你想要的橙色HEX值,比如偏亮的橙 */ selection-color: #ffffff; /* 可选:设置选中时的文本颜色,白色和橙色对比更清晰 */ } CSS css_provider.load(data: custom_css) # 将样式应用到当前文本框(如果要全局所有Entry,看下面的补充) entry.style_context.add_provider(css_provider, Gtk::StyleProviderPriority::USER) window.add(entry) window.show_all end app.run
关键说明:
selection-background-color就是控制选中文本的背景色,你可以替换成任何匹配设计需求的橙色HEX值。selection-color是可选配置,用来设置选中时的文本颜色,避免橙色背景和默认文本颜色对比不明显。- 如果想让所有文本框都生效,不用给单个Entry加样式,而是把CSS Provider注册到全局屏幕上下文:
Gtk::StyleContext.add_provider_for_screen( Gdk::Screen.default, css_provider, Gtk::StyleProviderPriority::USER )
这种方法适配Gtk3及以后的版本,比你之前用的modify_bg更稳定——现在Gtk的主题系统优先读取CSS样式,老方法很容易被主题样式覆盖掉。
内容的提问来源于stack exchange,提问作者Rahul Vijay Dawda
相关产品推荐
相关产品推荐

