在Matlab GUI中,我想动态显示一系列等距的框(包含在一个面板中)并动态突出显示一个特定的框。一种状态跟踪器(我的道歉,我不知道这个的技术术语)。显然,尺寸和间距应相对于容纳板。该GUI跟踪器将嵌入在包含的父图中。顺便说一句,他们不一定是正方形。单选按钮或只是普通的旧按钮可以正常工作。这可能吗 ?如果是这样,是否也可以在任何这些盒子上获得点击索引?据我所知,这可能是Matlab GUI的过多要求。提前谢谢。
EDIT1:这是我到目前为止所做的:
pnl = handles.trackerPanel;
pnlPose = get(pnl, 'Position');
pnlX = pnlPose(1);
pnlY = pnlPose(2);
pnlW = pnlPose(3);
pnlH = pnlPose(4);
panelSidePad = 0.01*pnlW;
% Continuous box space
boxcontW = (pnlW - 2*panelSidePad)/N;
% Visible box: part of the continuous box space
boxW = boxcontW*0.9;
% Same thing on height
panelTopPad = pnlH*0.01;
boxH = pnlH - 2*panelTopPad;
% Indeces along the X-dimension
boxXIdc = pnlX+panelSidePad:boxcontW:pnlX+panelSidePad + boxcontW*(N-1);
boxYIdc = pnlY + panelSidePad;
trackerObjects = [];
for ii = 1:length(boxXIdc)
objpos = [boxXIdc(ii), boxYIdc, boxW, boxH];
tObj = uicontrol('Parent', pnl,'Style','frame',...
'String','', 'Tag', sprintf('t_%d', ii), ...
'BackgroundColor', 'red',...
'Units','normalized','Position',objpos);
% Register callback function. Use the same function to catch all click
% events.
set(tObj, 'Callback', @tracker_Callback);
trackerObjects = [trackerObjects; tObj];
% For a dramatic loading effect.
drawnow();
end
if(length(boxXIdc) ~= N)
warning('Not all trackers were displayed');
end
handles.trackerObjects = trackerObjects;
但问题是框架/文本等对象不响应点击事件。我必须添加按钮。另一侧的按钮边缘较厚,当物体太多时,颜色会消失。那么,有没有人知道1)是否为帧/文本添加工作回调或2)使按钮显示没有“弹出”边缘并使它们看起来平坦和四四方方。我没有在属性检查器中看到任何按钮对象的任何此类属性。
编辑2:要获得对框架的点击,而不是使用“回调”,请使用“ButtonDownFcn”作为click-callback函数属性,如下所示:
set(tObj, 'ButtonDownFcn', @tracker_Callback);
现在将在鼠标点击时调用回调。