Change the Value of MATLAB uicontrols Programmatically does NOT call the ValueChangedFcn Callback
May. 25, 2023 • Updated Aug. 12, 2024
今天在调试MATLAB GUI程序时发现了一个关于ValueChangedFcn回调函数的调用特性:使用代码修改UI控件时并不会调用控件的ValueChangedFcn回调函数。
创建一个uidropdown和相应的ValueChangedFcn函数:
1
2
3
4
5
6
7
8
9
10
clc,clear,close all
fig = uifigure("Position",[680,558,180,180],"WindowStyle","alwaysontop");
dropdown = uidropdown(fig,"Position",[17.70,11.00,83.37,22.00],...
"ValueChangedFcn",@callback_uidropdown);
function callback_uidropdown(src,~)
disp("Value changed!")
disp(src.Value)
end
当在GUI中修改uidropdown的选项时,会调用回调函数callback_uidropdown:

使用代码修改uidropdown的值也可以修改GUI中的显示,但是不会调用回调函数:
1
set(dropdown,"Value","Option 1");

1
dropdown.Value = "Option 3";

state类型uibutton控件的"ValueChangedFcn"回调函数也是类似的:
1
2
3
4
5
6
7
8
9
10
clc,clear,close all
fig = uifigure("Position",[680,558,180,45],"WindowStyle","alwaysontop");
button = uibutton(fig,"state","Position",[17.70,11.00,83.37,22.00],...
"ValueChangedFcn",@callback_uibutton);
function callback_uibutton(src,~)
disp("Value changed!")
disp(src.Value)
end
可以进行同样的验证。
在编写GUI时需要注意这个小特性,否则会出现一些意料之外的错误。