下面的代码创建了3个无线电按钮。选择函数确保显示适当的内容:
function myui
bg = uibuttongroup('Visible','off',...
'Position',[0 0 .2 1],...
'SelectionChangedFcn',@bselection);
% Create three radio buttons in the button group.
r1 = uicontrol(bg,'Style','radiobutton',...
'String','Option 1',...
'Position',[10 350 100 30],...
'HandleVisibility','off');
r2 = uicontrol(bg,'Style','radiobutton',...
'String','Option 2',...
'Position',[10 250 100 30],...
'HandleVisibility','off');
r3 = uicontrol(bg,'Style','radiobutton',...
'String','Option 3',...
'Position',[10 150 100 30],...
'HandleVisibility','off');
% Make the uibuttongroup visible after creating child objects.
bg.Visible = 'on';
function bselection(source,callbackdata)
display(['Previous: ' callbackdata.OldValue.String]);
display(['Current: ' callbackdata.NewValue.String]);
display('------------------');
end
end我想改变每个代码显示的选择和内容(没有用户正在单击)。我可以将每个代码的无线电按钮选择设置为:
set(bg, 'SelectedObject', r2);这为正确的无线电按钮(似乎被选中)绘制了蓝点,但是没有显示正确的内容。我想我需要手动调用'SelectionChangedFcn‘,但我不能这样做,因为它要求’回调数据‘,这是一个'matlab.ui.eventdata.SelectionChangedData’类,还没有文档。
问题:在编写无线电按钮更改代码时,我需要自己创建“回调数据”以从外部调用SelectionChangedFcn吗?还是有其他方法?
Question2:对于为什么/什么时候'HandleVisibility‘是有用的,MatLab文档对我来说太神秘了,我会给出一个小小的提示。
发布于 2017-01-17 08:51:21
首先,关于问题2:如果在无线电按钮上将属性HandleVisibility设置为off,您将无法访问uibuttongroup句柄中its的句柄。
例如,使用HandleVisibility到off
bg.Children
ans =
0x0 empty GraphicsPlaceholder array.使用HandleVisibility到on
bg.Children
ans =
3x1 UIControl array:
UIControl (Option 3)
UIControl (Option 2)
UIControl (Option 1)这取决于你如何访问你的无线电按钮。
关于以编程方式调用回调函数,我建议您编写自己的回调函数,而不是使用SelectionChangedFcn (在这种情况下,您可以将HandleVisibility设置为on)。这个解决方案适用于我:
function myui
figure
bg = uibuttongroup('Visible','off',...
'Position',[0 0 .2 1]);
% Create three radio buttons in the button group.
r1 = uicontrol(bg,'Style','radiobutton',...
'String','Option 1',...
'Position',[10 350 100 30],...
'HandleVisibility','on');
r2 = uicontrol(bg,'Style','radiobutton',...
'String','Option 2',...
'Position',[10 250 100 30],...
'HandleVisibility','on');
r3 = uicontrol(bg,'Style','radiobutton',...
'String','Option 3',...
'Position',[10 150 100 30],...
'HandleVisibility','on');
% Make the uibuttongroup visible after creating child objects.
bg.Visible = 'on';
% Use here your own way to switch the buttons, I use a simple vector as a counter
CounterToSelect = [1 2 3 1 2 3 1 2 3];
for k=1:length(CounterToSelect);
pause(1)
previousChild = bg.SelectedObject;
selectedChild = bg.Children(CounterToSelect(k));
bg.SelectedObject = selectedChild;
DisplayInfoChildren(previousChild, selectedChild);
end
end
function DisplayInfoChildren(previousChild, selectedChild)
display(['Previous: ' previousChild.String]);
display(['Current: ' selectedChild.String]);
display('------------------');
endhttps://stackoverflow.com/questions/38288003
复制相似问题