【问题标题】:Updating all components of a Matlab gui (created with guide)更新 Matlab gui 的所有组件(使用指南创建)
【发布时间】:2013-12-10 19:54:18
【问题描述】:

我的 Matlab GUI 是一个包含许多文本字段的表单,这些文本字段最初使用相同的数据结构填充。每个文本字段都有一个回调和一个创建函数,其中文本字段被分配给定结构的值。但是,稍后我想使用不同的结构重新填充表单,作为按下按钮触发的事件。代码大致如下:

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

【问题讨论】:

    标签: matlab user-interface matlab-guide


    【解决方案1】:

    当您setset(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 )
    

    编辑:不要忘记删除计时器 (delete(T)) 或在退出 GUI 或执行 clear T 之前将其停止,否则它将继续运行,您将不得不退出MATLAB...不,我不只是自己做的!

    【讨论】:

    • 谢谢!这几乎回答了我的问题......似乎文本字段回调仅在用户输入时调用,还是还有其他情况?
    • @user1186155 触发回调的规则因对象类型而异,但是是的,回调不会自动运行。但是,您可以创建一个timer,它将以特定时间间隔定期更新回调。我用这些方面的建议更新了答案。
    【解决方案2】:

    你需要用这个更新句柄结构:

    % Update handles structure
    guidata(hObject, handles);
    

    【讨论】:

    • 我也试过了,但似乎没有效果,而只使用'set'似乎有效。也许我指的是错误的句柄?我的第一个猜测是句柄 hObject 应该与我的代码中的 h 相同,即表单的句柄。但是,代码中的跟踪表明在调用 guidata(h,handles) 时不会调用与每个文本字段关联的回调。
    • 好的。可能当时我还不太明白。您的文本字段用字符串填充并显示。但是你只是想得到一些递归的东西来填充它们?我不确定是否能抓住它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    相关资源
    最近更新 更多