Change the Value of MATLAB uicontrols Programmatically does NOT call the ValueChangedFcn
Callback
May. 25, 2023
今天在调试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时需要注意这个小特性,否则会出现一些意料之外的错误。