My Matlab GUI是一个包含许多文本字段的表单,最初使用相同的数据结构填充。每个文本字段都有一个回调和一个create函数,其中text字段被赋予给定struct的值。但是,稍后我想使用不同的结构重新填充表单,作为按下按钮触发的事件。代码看起来大致如下:
h = MyFigure;
global mystruct
mystruct = somevalues;
handles = guidata(h);
set( handles.textfield1, 'String', mystruct.value1 )
...
set( handles.textfieldN, 'String', mystruct.valueN )
但是,如果我可以让Matlab递归调用所有这些回调(比如“验证树”函数),我就不必为每个文本字段调用“set”。我试过刷新(h)和drawow(),没有运气。
现在我的问题是matlab指南框架中是否内置了这样的功能?
答案 0 :(得分:1)
当您set
set(h,'String',str)
之类的句柄属性时,会复制str
的值。它不是可以自动更新的变量的引用。最好的办法是创建一个名为updateText
的子程序或类似的子程序,将所有set
语句放入其中,并在需要时调用它。
调用guidata(hObject, handles);
仅用于更新 GUI并修改handles
。你可能在别处需要这个,但是为了更新某些句柄图形对象的属性,它并没有真正使用。
一种可能性是创建timer
以定期更新文本字段。在GUI的打开功能中,创建一个定时器,定义一个定期运行的更新功能:
T = timer('Period',1,'StartDelay',0.5,'TimerFcn', ...
{@updateTextBoxes,handles},'ExecutionMode','FixedRate');
start(T)
更新功能如下:
function updateTextBoxes(hTimerObj, timerEvent, handles)
global mystruct
% get mystruct data however you do it...
% maybe also get handles via handles=guidata(hTimerObj); instead of input
set( handles.textfield1, 'String', mystruct.value1 )
...
set( handles.textfieldN, 'String', mystruct.valueN )
编辑:在退出GUI或delete(T)
之前,不要忘记删除计时器(clear T
)或停止计时器,否则它会继续运行而你将不得不退出MATLAB ......不,我自己也不是这样做的!
答案 1 :(得分:0)
您需要使用以下命令更新句柄结构:
% Update handles structure
guidata(hObject, handles);