I have this simple code below, which consists of two multi-select controls. However, even only one control changes, the other control’s callback method is also invoked, which seems a bug to me.
Any idea?
Hello,
The issue lies in how you are invoking the on_change callback function within the st.multiselect. When you use on_change=multiselect_callback("get"), you are calling the function immediately and passing its return value (in this case, None, since print(val) does not return anything) to the on_change parameter. This causes both callbacks to be triggered prematurely and not behave as intended.
Callbacks are supposed to be function (actually callables). multiselect_callback("get") is not a function but None You can check it by adding this to your code:
assert multiselect_callback("get") is None
The funcion is called not when the widget changes but when the widget is created.