处理Matlab GUI中的行为

大卫

为什么这不起作用?正如您在下面的错误报告中所看到的那样,字段handles.check没有携带到回调函数中。

function example2_4

N=500;
M=300;

handles.fig=figure('Units','Pixels',...
    'Position',[100 100 N M])

handles.axes=axes('Units','Pixels',...
    'Position',[25 25 N-200 M-50]);

handles.check=uicontrol('style','checkbox',...
    'string','Enable Axes Grid Lines',...
    'Position',[N-150,M/2-25 150 50],...
    'Callback',{@checkbox_callback,handles});

function checkbox_callback(gcf,event_data,handles)
handles
val=get(handles.check,'Value');
if val
    grid on;
else
    grid off;
end

错误报告:

handles = 

     fig: 2
    axes: 331.0076

Reference to non-existent field 'check'.

Error in example2_4>checkbox_callback (line 19)
val=get(handles.check,'Value');

Error while evaluating uicontrol Callback

然而,这确实有效。这次handles.check被携带到回调函数中。

function example2_4

N=500;
M=300;

handles.fig=figure('Units','Pixels',...
    'Position',[100 100 N M]);

handles.axes=axes('Units','Pixels',...
    'Position',[25 25 N-200 M-50]);

handles.check=uicontrol('style','checkbox',...
    'string','Enable Axes Grid Lines',...
    'Position',[N-150,M/2-25 150 50]);

set(handles.check,'Callback',{@checkbox_callback,handles});


function checkbox_callback(gcf,event_data,handles)
handles
val=get(handles.check,'Value');
if val
    grid on;
else
    grid off;
end

处理报告:

handles = 

      fig: 3
     axes: 488.0044
    check: 489.0044
杰夫

仅将的一个副本handles传递到回调中。所以在

handles.check=uicontrol('style','checkbox',...
   'string','Enable Axes Grid Lines',...
   'Position',[N-150,M/2-25 150 50],...
   'Callback',{@checkbox_callback,handles});

handles,作为参数传递给checkbox_callback,则仅设置axesfig字段,因为代码仅在创建check字段的过程中

而在

set(handles.check,'Callback',{@checkbox_callback,handles});

handles(或复印件)有figaxescheck领域已经设置给前三个语句。

编辑

我总是使用GUIDE创建我的GUI,然后依靠该guidata函数来获取和设置handles结构中的字段在您的示例中,您可能必须guidata使用setappdataandgetappdata函数或使用and函数执行类似的操作有关详细信息,请参见在回调之间共享数据

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Matlab中的YUV视频处理

来自分类Dev

在Matlab中处理大型矩阵

来自分类Dev

Matlab中的多页Gui

来自分类Dev

图像处理-Matlab中TIFF图像的灰度

来自分类Dev

用于Matlab中的循环和批处理的parfor循环

来自分类Dev

在Matlab中无需for循环即可处理矩阵

来自分类Dev

在Matlab中处理非常大且稀疏的矩阵

来自分类Dev

Matlab中的十六进制数据处理

来自分类Dev

MATLAB中奇怪的rand()行为

来自分类Dev

与Matlab中的批处理过程共享全局变量

来自分类Dev

在MATLAB中解释sprintf的行为

来自分类Dev

在Matlab GUI中拖放文件

来自分类Dev

MATLAB inputParser中的异常行为

来自分类Dev

是否可以在MATLAB classdef中更改方法函数处理程序

来自分类Dev

在Matlab中处理颜色栏的基础图像数据

来自分类Dev

在MATLAB中批处理图像的格式转换

来自分类Dev

在Matlab中处理错误数据

来自分类Dev

Matlab中的YUV视频处理

来自分类Dev

Matlab中的多页Gui

来自分类Dev

GUI中的异常处理

来自分类Dev

Matlab中的字符串处理

来自分类Dev

在Matlab中无需for循环即可处理矩阵

来自分类Dev

Matlab:在图像中查找和处理对象

来自分类Dev

如何在Matlab中处理'='左侧的subsref

来自分类Dev

在MATLAB GUI中循环

来自分类Dev

解释sprintf在MATLAB中的行为

来自分类Dev

在Matlab的GUI中绘图

来自分类Dev

Matlab中的图像处理

来自分类Dev

如何在 MATLAB 中处理文件列表