Lightroom插件Windows端sectionsForBottomOfDialog含Camera段后内容时不显示求助
Lightroom插件Windows下sectionsForBottomOfDialog内容不显示问题解决
问题描述
开发的Lightroom插件在MacOS上运行正常,但在Windows系统中,sectionsForBottomOfDialog内—— Camera ——之后的内容无法显示。其他插件的sectionsForBottom可正常显示文件和按钮,自身代码无报错,对比其他插件代码后仍未定位问题。禁用sectionsForBottomOfDialog时,sectionsForTopOfDialog可正常工作。
问题根源
问题出在Lua的自动分号插入规则上:当return语句后直接换行时,Lua会自动在return后添加分号,导致后续代码不会被作为返回值返回。你的ConfigDialogs.CameraFilm函数中,return与f:group_box分两行写,函数实际返回的是nil,而非预期的group_box控件,这就导致Windows下Lightroom无法渲染这部分内容。
相关代码对比
原问题代码
function ConfigDialogs.CameraFilm(f, propertyTable) return f:group_box { title = 'Adding Camera and Film', fill_horizontal = 1, --------- Camera -------- f:row { f:static_text { title = "Camera Name:", alignment = "left", width_in_chars = "11", }, f:edit_field { alignment = "left", width_in_chars = 20, immediate = true, value = bind "CameraName", },…
正常工作的ConfigDialogs.Information代码
function ConfigDialogs.Information(f, propertyTable) return f:row { spacing = f:control_spacing(), f:static_text { title = "bla bla bla", }, } end
注:此代码实际也存在相同语法隐患,只是Lightroom处理顶部对话框的逻辑差异未触发问题。
解决方案
将return与要返回的控件定义放在同一行,或者用括号将返回内容包裹起来,避免Lua自动插入分号:
修改后的代码示例1
function ConfigDialogs.CameraFilm(f, propertyTable) return f:group_box { title = 'Adding Camera and Film', fill_horizontal = 1, --------- Camera -------- f:row { f:static_text { title = "Camera Name:", alignment = "left", width_in_chars = "11", }, f:edit_field { alignment = "left", width_in_chars = 20, immediate = true, value = bind "CameraName", },…
修改后的代码示例2(用括号包裹)
function ConfigDialogs.CameraFilm(f, propertyTable) return ( f:group_box { title = 'Adding Camera and Film', fill_horizontal = 1, --------- Camera -------- f:row { f:static_text { title = "Camera Name:", alignment = "left", width_in_chars = "11", }, f:edit_field { alignment = "left", width_in_chars = 20, immediate = true, value = bind "CameraName", },… } ) end
修改后函数会正确返回group_box控件,Windows下的Lightroom就能正常渲染这部分内容了。
内容的提问来源于stack exchange,提问作者user14964979
相关产品推荐
相关产品推荐

