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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:56:51