Python Shiny中如何用panel_conditional检查输入是否包含指定值?
解决Shiny多选Selectize组件条件判断失效问题
你遇到的问题核心是:ui.panel_conditional里的条件表达式是JavaScript代码,不是Python代码,所以用Python的in运算符根本不会被JS识别,自然失效。
要判断多选组件是否包含'Alabama',得用JavaScript的数组/字符串判断逻辑,修改后的代码如下:
from shiny import ui, App, render app_ui = ui.page_fluid( ui.input_selectize( "state", "State", choices = [ "Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming", "Washington D.C." ], multiple = True ), # 改用JS的includes方法,兼容未选中、单选、多选三种情况 ui.panel_conditional("(input.state || []).includes('Alabama')", "TEST") ) def server(input, output, session): ... app = App(app_ui, server)
补充说明:
- 多选组件的
input.state在JS环境中的值分三种情况:未选时为null,选一个时是字符串,选多个时是字符串数组。 (input.state || [])的作用是把null转为空数组,避免调用includes时报错;如果是字符串或数组,直接调用includes方法判断是否包含目标值——字符串的includes会检查自身是否等于目标值,数组的includes会检查元素是否存在,刚好覆盖所有场景。
内容的提问来源于stack exchange,提问作者Dave Rosenman
相关产品推荐
相关产品推荐

