Matlab 图形用户界面 : How to update handles structure?

标签 matlab user-interface handles

我正在研究 GUI。我想将数据存储在句柄结构中创建的额外字段中。但是,我不知道如何在回调函数结束时正确更新句柄结构。请给任何建议。

我的简化程序

  • 设置信号数量(1-10)。每个信号有 3 个参数。
  • 从 handles 结构中创建的数组中读取所选信号的参数 (默认为零)。
  • 修改参数,更新数组。

界面

function simple_gui(hObject, h)

h.fig = figure(...
    'Units','pix',...
    'Position',[50 50 500 400],...
    'Visible','default',...
    'Name','GUI',...
    'NumberTitle','off',...
    'Resize','on');

table = {'1' , '2', '3' , '4', '5', '6', '7', '8', '9', '10' };

h.number = uicontrol(...
    'Units','characters',...
    'Max',10,...
    'Min',1,...
    'String',table,...
    'Style','popupmenu',...
    'Value',1,...
    'Position',[37.4 28.3846153846154 19.4 1.61538461538462],...
    'BackgroundColor',[1 1 1]);

h.edit1 = uicontrol(...
    'Units','pix',...
    'String','0',...
    'Style','edit',...
    'Position',[180 280 50 20],...
    'BackgroundColor',[1 1 1],...
    'FontSize',10);

h.edit2 = uicontrol(...
    'Units','pix',...
    'String','0',...
    'Style','edit',...
    'Position',[180 255 50 20],...
    'Children',[],...
    'FontSize',10);

h.edit3 = uicontrol(...
    'Units','pix',...
    'String','0',...
    'Style','edit',...
    'Position',[180 230 50 20],...
    'FontSize',10);

主要代码:

h.parameter1 = zeros(1,10);
h.parameter2 = zeros(1,10);
h.parameter3 = zeros(1,10);
h.signal_no = 0;

h.number.Callback = {@number_Callback, h};

h.edit1.Callback = {@parameter_change_Callback, h};
h.edit2.Callback = {@parameter_change_Callback, h};
h.edit3.Callback = {@parameter_change_Callback, h};
guidata(h.fig, h);

function number_Callback(hObject,eventdata, h)
h = guidata(hObject);
h.signal_no = hObject.Value;
k = h.signal_no;
h.edit1.String = h.parameter1(k);
h.edit2.String = h.parameter2(k);
h.edit3.String = h.parameter3(k);
guidata(hObject,h);

function parameter_change_Callback(hObject,eventdata, h)
h = guidata(hObject);
k = h.signal_no;
h.parameter1(k) = str2double(h.edit1.String);
h.parameter2(k) = str2double(h.edit2.String);
h.parameter3(k) = str2double(h.edit3.String);
guidata(hObject, h);

最佳答案

总结:

在 GUI 回调函数结束时调用 guidata(handleObject, varToStore) ( documentation ) 以确保存储对一个修改变量的更新。此处,handleObject 是图形的句柄或其子对象,varToStore 是要存储的更新变量;它通常是一个结构。

从图窗或子句柄中检索存储数据的语法:

handles = guidata(gcbo);  % gcbo will get the callback object (instance of handle class).  
handles.propToUpdate = handles.propToUpdate+1;  
guidata(gcbo,handles);    % stores the updated struct 

此外:

您不会看到弹出菜单的更改反射(reflect)在使用当前代码的 GUI 中的编辑框中,因为您正在将数值分配给编辑句柄的 String 字段。您在对该字段取值时调用 str2double(),只需执行相反的操作 (num2str()) 即可获取可显示的值。这是更新后的代码一个简化的回调声明

h.number.Callback = @number_Callback;

function number_Callback(hObject,~)
    h = guidata(hObject);
    h.signal_no = hObject.Value;
    k = h.signal_no;
    h.edit1.String = num2str(h.parameter1(k));
    h.edit2.String = num2str(h.parameter2(k));
    h.edit3.String = num2str(h.parameter3(k));
    guidata(hObject,h);
 end

关于Matlab 图形用户界面 : How to update handles structure?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43721307/

相关文章:

matlab - MATLAB中的复杂倒谱变换

matlab - 无法收听 UIAxes 的 YLim 属性

user-interface - 如何将进度条控件添加到 Matlab gui?

c# - 运行测试时特定机器上出现 OutOfMemoryException

matlab - For 循环将矩阵拆分为大小相等的子矩阵

matlab - 更改 scatter3 中标记的大小

matlab - 如何在 MATLAB 中将鼠标光标转换为加载

windows - 用户界面的缩放(放大/缩小)行为的标准键是什么

css - radEditor 富文本编辑器中 BODY 元素上顽固的调整大小句柄控件

c++ - 有关闭多个句柄的简单方法吗?