在 Linux 上使用 .Xdefaults 自定义小部件外观
21850 为本文评分:
5.0
在 Linux 上使用 .Xdefaults 自定义小部件外观
匿名作者 2014年2月27日,星期四
本文讨论如何创建“.Xdefaults”文件,以在 Linux 和 Mac OS X 上自定义 IDL 小部件的外观。
如果您使用 IDL 编写小部件应用程序,可能会发现其在 Windows 和基于 Unix 的系统上运行时外观有所不同。例如,如果在 Windows 上运行程序“test_control_widget_colors”(代码见下文),其外观如下:

如果在 Linux、MacOS X 或 Solaris 系统上运行“test_control_widget_colors.pro”,结果外观如下:

不同平台间外观存在差异,是因为 IDL 在 Linux、Mac OS X 和 Solaris 上使用 Motif 工具包来构建小部件。Motif 小部件的外观可以通过使用 RESOURCE_NAME 关键字和“.Xdefaults”文件进行自定义。在 WIDGET_BASE 帮助页面 的 RESOURCE_NAME 部分,提供了一些关于如何实现此功能的信息。
需要快速说明一点,IDL 文档中提及了 OSF/Motif Programmer's Reference Manual,但 OSF(开放软件基金会)目前是 Open Group 的一部分。您可以访问 Open Group 的网站,找到关于"Open Motif"的有用文档。
IDL 文档中有一个如何在 Unix 平台上自定义小部件的示例。下面,我提供了另一个示例。您可以通过以下步骤使其工作:
1) 打开文本编辑器,输入以下文本并将其保存为“.Xdefaults”文件到您的主目录:
Idl*background:grey90 Idl*testWidget*testText*background: White Idl*testWidget*area*indicatorType: One_OF_MANY_ROUND Idl*testWidget*area*selectColor: Black Idl*testWidget*area*bottomShadowColor: grey39 Idl*testWidget*area*topShadowColor: grey39 Idl*testWidget*checkarea*indicatorOn: INDICATOR_CHECK_BOX
2) 打开终端,并输入以下命令:
xrdb -load ~/.Xdefaults
3) 从同一个终端打开"idlde",并将以下代码复制/粘贴到新文档中。将文档保存为"test_control_widget_colors.pro",然后运行它。
pro test_control_widget_colors_event, ev compile_opt idl2
help, /STRUCTURE, ev
end
pro test_control_widget_colors compile_opt idl2
wb = widget_base(resource_name="testWidget",/COLUMN) wlabel = WIDGET_LABEL(wb, VALUE="Test Label")
wtext = WIDGET_TEXT(wb, VALUE="Test Value", $ resource_name="testText",/EDITABLE)
areabase = widget_base(wb, /exclusive, $ /row, resource_name="area")
yes_button = WIDGET_BUTTON(areabase, $ value='yes', $ RESOURCE_NAME="radiobutton")
no_button = widget_button(areabase, value='no', $ RESOURCE_NAME="nobutton")
maybe_button = widget_button(areabase,value='maybe', $ RESOURCE_NAME="maybebutton")
checkbase = widget_base(wb, /NONEXCLUSIVE, /row, $ RESOURCE_NAME="checkarea")
checkbutton = widget_button(checkbase, value="Check", $ RESOURCE_NAME="checkbutton")
widget_control, /REALIZE, wb xmanager, "test_control_widget_colors", wb
end
如果一切正常,输出的小部件应具有以下外观:

我想简要描述一下“.Xdefaults”文件中的操作。首先需要注意的是,小部件内的每个对象都被分配了一个 RESOURCE_NAME。这些 RESOURCE_NAME 值用于在“.Xdefaults”文件中标识小部件组件。
“.Xdefaults”文件的第一行,将所有 IDL 小部件的背景色更改为浅灰色。为此,我将“Idl”资源的“background”属性更改为另一种灰色调。
Idl*background:grey90
在“.Xdefaults”的第二行,我希望将文本对象的背景更改为白色。为此,我复制了资源名称的分支(用“*”字符分隔),并将此小部件元素的“background”属性定义为“White”。
Idl*testWidget*testText*background: White
“.Xdefaults”的第三行,将切换按钮的形状更改为圆形。为此,我找到了控制形状的 Motif 切换按钮属性(XmNindicatorType),去掉了"XmN"前缀,并将此属性设置为圆形(One_OF_MANY_ROUND)。
Idl*testWidget*area*indicatorType: One_OF_MANY_ROUND
在文件的其余部分,我使用类似的过程更改了按钮轮廓的颜色("bottomShadowColor"和"topShadowColor"),并在复选框中显示对勾("indicatorOn")。
我希望这些信息对您有所帮助。感谢阅读!