如何在AppleScript中通过变量设置ColourPicker的默认颜色?
解决AppleScript中用变量设置ColourPicker默认颜色的问题
问题原因
你当前的代码里,do shell script返回的是字符串类型的"{65535, 0, 65535}",但choose color命令的default color参数需要的是整数列表(比如{65535, 0, 65535}这种原生AppleScript列表),类型不匹配导致无法正常运行。
解决方案
方案1:直接定义列表变量(如果不需要从shell获取值)
如果你的默认颜色不需要通过shell脚本生成,直接定义列表类型的变量即可:
set defaultColour to {65535, 0, 65535} set RGB to (choose color default color defaultColour)
方案2:将shell返回的字符串转换为列表(必须从shell获取值时)
如果必须通过shell脚本获取颜色字符串,需要把字符串解析成AppleScript列表:
-- 从shell获取颜色字符串(去掉大括号,仅返回逗号分隔的数字) set colourString to do shell script "echo 65535,0,65535" -- 分割字符串为单个数字文本 set colourParts to my splitString(colourString, ",") -- 转换为整数列表 set defaultColour to {} repeat with part in colourParts set end of defaultColour to (part as integer) end repeat -- 调用颜色选择器 set RGB to (choose color default color defaultColour) -- 辅助函数:分割字符串 on splitString(inputStr, delimiter) set AppleScript's text item delimiters to delimiter set splitList to text items of inputStr set AppleScript's text item delimiters to "" return splitList end splitString
如果你的shell命令必须返回带大括号的字符串,可以在解析前先去除首尾符号:
set colourString to do shell script "echo {65535, 0, 65535}" -- 去掉首尾的大括号 set colourString to text 2 thru -2 of colourString -- 后续分割、转换步骤同方案2
补充说明
- AppleScript的列表是原生数据类型,不能直接把字符串形式的列表当成真实列表使用,必须做类型转换。
choose color的颜色值范围是0到65535,确保转换后的整数在这个区间内。
内容的提问来源于stack exchange,提问作者Rastafabi
相关产品推荐
相关产品推荐

