为何Perl Tk脚本第二个运行实例无法读取Xresources?如何修复?
修复Perl Tk多实例无法读取X资源的问题
问题原因
Perl Tk默认会为每个新启动的脚本实例自动生成递增的实例名(比如第一个实例为weird,第二个为weird-2),而你的X资源规则是基于固定实例名weird匹配的,第二个实例的实例名变更后无法匹配资源规则,导致样式不生效。
解决方案
方案一:基于应用程序类匹配X资源(推荐)
- 修改Xresources文件,将资源规则改为类名匹配(类名通常首字母大写):
Weird*font: clean Weird*foreground: steel blue Weird*background: cornsilk
- 更新脚本,创建MainWindow时显式指定统一的应用程序类:
my $mw = MainWindow->new(-title => 'Menu', -class => 'Weird'); $mw->Label(-text => 'hello world')->pack; MainLoop;
- 重新加载X资源到X服务器:
xrdb ~/.Xresources
方案二:强制所有实例使用相同的实例名
直接修改脚本,创建MainWindow时指定固定的实例名,匹配现有X资源规则:
my $mw = MainWindow->new(-title => 'Menu', -name => 'weird'); $mw->Label(-text => 'hello world')->pack; MainLoop;
此方案无需修改Xresources文件,所有实例会共用同一个实例名,从而匹配资源规则。
内容的提问来源于stack exchange,提问作者Steve Waring
相关产品推荐
相关产品推荐

