更新Matlab gui的所有组件(使用指南创建)

时间:2013-12-10 19:54:18

标签: matlab user-interface matlab-guide

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指南框架中是否内置了这样的功能?

2 个答案:

答案 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);