首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用代码选择Matlab的R2015b无线电按钮

用代码选择Matlab的R2015b无线电按钮
EN

Stack Overflow用户
提问于 2016-07-10 02:18:02
回答 1查看 336关注 0票数 0

下面的代码创建了3个无线电按钮。选择函数确保显示适当的内容:

代码语言:javascript
复制
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

我想改变每个代码显示的选择和内容(没有用户正在单击)。我可以将每个代码的无线电按钮选择设置为:

代码语言:javascript
复制
set(bg, 'SelectedObject', r2);

这为正确的无线电按钮(似乎被选中)绘制了蓝点,但是没有显示正确的内容。我想我需要手动调用'SelectionChangedFcn‘,但我不能这样做,因为它要求’回调数据‘,这是一个'matlab.ui.eventdata.SelectionChangedData’类,还没有文档。

问题:在编写无线电按钮更改代码时,我需要自己创建“回调数据”以从外部调用SelectionChangedFcn吗?还是有其他方法?

Question2:对于为什么/什么时候'HandleVisibility‘是有用的,MatLab文档对我来说太神秘了,我会给出一个小小的提示。

EN

回答 1

Stack Overflow用户

发布于 2017-01-17 08:51:21

首先,关于问题2:如果在无线电按钮上将属性HandleVisibility设置为off,您将无法访问uibuttongroup句柄中its的句柄。

例如,使用HandleVisibilityoff

代码语言:javascript
复制
bg.Children

ans = 

  0x0 empty GraphicsPlaceholder array.

使用HandleVisibilityon

代码语言:javascript
复制
bg.Children

ans = 

  3x1 UIControl array:

  UIControl    (Option 3)
  UIControl    (Option 2)
  UIControl    (Option 1)

这取决于你如何访问你的无线电按钮。

关于以编程方式调用回调函数,我建议您编写自己的回调函数,而不是使用SelectionChangedFcn (在这种情况下,您可以将HandleVisibility设置为on)。这个解决方案适用于我:

代码语言:javascript
复制
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('------------------');
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38288003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档