Matlab GUI 回调问题
Matlab GUI callback troubles
我尝试在除输入和面板按钮之外的其他地方按下和释放鼠标按钮时让 uipanel 改变边框颜色。
function [oldpropvalues,varargout]=DisableFigure(handlearray,prop,propvalue,varargin);
oldpropvalues=get(handlearray,prop);
%this IF is used to highlight the "modal" panel when anywhere outside it is pressed
if length(varargin)==2
%these two are the old windowbutton functions which will be put back when the window is put back to normal.
varargout{1}=get(varargin{1},'windowbuttondownfcn');
varargout{2}=get(varargin{1},'windowbuttonupfcn');
set(varargin{1},'windowbuttondownfcn',['set(varargin{2},''bordertype'',''line'',''borderwidth'',2,''highlightcolor'',[0 0 0])']);
set(varargin{1},'windowbuttonupfcn',['set(varargin{2},''bordertype'',''beveledout'',''borderwidth'',1,''highlightcolor'',[1 1 1])']);
end
set(handlearray,prop,propvalue);
错误显示
未定义变量 "varargin" 或 class "varargin".
评估图 WindowButtonDownFcn 时出错
未定义变量 "varargin" 或 class "varargin".
评估图 WindowButtonUpFcn 时出错
你没有说明错误是如何产生的,但从错误消息来看,我猜你调用的函数输入参数少于 4 个。那么varargin
不存在,所以matlab报错
为避免错误,您需要在使用varargin
之前检查nargin
,例如,将您的if
语句行替换为
if nargin==5 % so length(varargin)==2
您的问题是您正在定义 window callbacks as character vectors, which are evaluated in the base workspace where the variable varargin
doesn't exist. You can define them as anonymous functions 而不是:
set(varargin{1}, 'WindowButtonDownFcn', ...
@(~, ~) set(varargin{2}, 'BorderType', 'line', 'BorderWidth', 2, ...
'HighlightColor', [0 0 0]));
set(varargin{1}, 'WindowButtonUpFcn', ...
@(~, ~) set(varargin{2}, 'BorderType', 'beveledout', 'BorderWidth', 1, ...
'HighlightColor', [1 1 1]));
我尝试在除输入和面板按钮之外的其他地方按下和释放鼠标按钮时让 uipanel 改变边框颜色。
function [oldpropvalues,varargout]=DisableFigure(handlearray,prop,propvalue,varargin);
oldpropvalues=get(handlearray,prop);
%this IF is used to highlight the "modal" panel when anywhere outside it is pressed
if length(varargin)==2
%these two are the old windowbutton functions which will be put back when the window is put back to normal.
varargout{1}=get(varargin{1},'windowbuttondownfcn');
varargout{2}=get(varargin{1},'windowbuttonupfcn');
set(varargin{1},'windowbuttondownfcn',['set(varargin{2},''bordertype'',''line'',''borderwidth'',2,''highlightcolor'',[0 0 0])']);
set(varargin{1},'windowbuttonupfcn',['set(varargin{2},''bordertype'',''beveledout'',''borderwidth'',1,''highlightcolor'',[1 1 1])']);
end
set(handlearray,prop,propvalue);
错误显示 未定义变量 "varargin" 或 class "varargin".
评估图 WindowButtonDownFcn 时出错
未定义变量 "varargin" 或 class "varargin".
评估图 WindowButtonUpFcn 时出错
你没有说明错误是如何产生的,但从错误消息来看,我猜你调用的函数输入参数少于 4 个。那么varargin
不存在,所以matlab报错
为避免错误,您需要在使用varargin
之前检查nargin
,例如,将您的if
语句行替换为
if nargin==5 % so length(varargin)==2
您的问题是您正在定义 window callbacks as character vectors, which are evaluated in the base workspace where the variable varargin
doesn't exist. You can define them as anonymous functions 而不是:
set(varargin{1}, 'WindowButtonDownFcn', ...
@(~, ~) set(varargin{2}, 'BorderType', 'line', 'BorderWidth', 2, ...
'HighlightColor', [0 0 0]));
set(varargin{1}, 'WindowButtonUpFcn', ...
@(~, ~) set(varargin{2}, 'BorderType', 'beveledout', 'BorderWidth', 1, ...
'HighlightColor', [1 1 1]));