Perl Gtk3中如何设置可选择Label组件的光标(插入符)颜色?
解决方案
1. 可选择Label插入符样式修改
GTK 3中caret-color标准CSS属性仅对输入类组件(如Entry、TextView)生效,可选择Label的插入符需要使用GTK专属的CSS属性-GtkWidget-cursor-color控制,你只需要将原来的CSS规则替换为该属性即可实现透明/自定义颜色效果。
如果要完全隐藏插入符,设置值为transparent即可;如果要降低显眼程度,可设置为和Label文字颜色相近的低饱和度色。
2. 样式优先级常量写法
Perl的Gtk3绑定中,C端的GTK_STYLE_PROVIDER_PRIORITY_*系列宏都被映射为Gtk3命名空间下的常量,对应写法如下:
- 最低优先级:
Gtk3::STYLE_PROVIDER_PRIORITY_FALLBACK(对应数值1) - 主题优先级:
Gtk3::STYLE_PROVIDER_PRIORITY_THEME(对应数值200) - 系统设置优先级:
Gtk3::STYLE_PROVIDER_PRIORITY_SETTINGS(对应数值400) - 应用自定义优先级:
Gtk3::STYLE_PROVIDER_PRIORITY_APPLICATION(对应数值600) - 用户自定义最高优先级:
Gtk3::STYLE_PROVIDER_PRIORITY_USER(对应数值800)
你可以直接传入常量名,不需要加引号,就可以被Perl正确识别。
修改后的完整代码
#!/usr/bin/perl use Gtk3 -init; my $window = Gtk3::Window->new('toplevel'); # 新增窗口关闭退出逻辑,避免关闭窗口后进程残留 $window->signal_connect(destroy => sub { Gtk3->main_quit(); }); my $box = Gtk3::Box->new('horizontal',0); my $label = Gtk3::Label->new(); $label->set_selectable(TRUE); $label->set_label("Testing"); $box->pack_start($label, FALSE, FALSE, 5); # 替换为GTK专属的插入符颜色属性 my $style = "* { -GtkWidget-cursor-color: transparent; }"; my $css = Gtk3::CssProvider->new(); $css->load_from_data($style); my $stylecontext = $label->get_style_context(); # 使用官方定义的优先级常量,应用级优先级可确保自定义样式生效 $stylecontext->add_provider($css, Gtk3::STYLE_PROVIDER_PRIORITY_APPLICATION); $window->add($box); $window->show_all; Gtk3->main();
内容的提问来源于stack exchange,提问作者Malhonen
相关产品推荐
相关产品推荐

