我正在试图弄清楚如何制作一个带有单选按钮的图形用户界面,它可以根据单选按钮的选择来启用/禁用选项。下面是我尝试过的一种方法的一个例子:
fig = uifigure('NumberTitle','off','Name','Option Selection','Position',[750,300,460,520]);
panel1 = uipanel(fig,'Title','Options','Position',[140,80,200,280]);
bg = uibuttongroup(fig,'Position',[140 290 200 51],'SelectionChangedFcn',@bselection);
rb1 = uiradiobutton(bg,'Position',[5 30 100 20],'FontWeight','bold');rb1.Text = 'Option 1';
rb2 = uiradiobutton(bg,'Position',[5 10 100 20],'FontWeight','bold');rb2.Text = 'Option 2';
Opt1_label = uilabel(panel1,'text','Option 1','Position',[5 180 100 20],'FontWeight','bold');
Opt1_field = uieditfield(panel1,'text','Position',[5 160 100 20]);
Opt2_label = uilabel(panel1,'text','Option 2','Position',[5 60 250 20],'FontWeight','bold');
Opt2_field = uitextarea(panel1,'Position',[5 15 190 45]);
function bselection(bg,Opt1_label,Opt1_field,Opt2_label,Opt2_field)
if bg.Buttons(1).Value == 1
Opt1_label.Enable=1;
Opt1_field.Enable=1;
Opt2_label.Enable=0;
Opt2_field.Enable=0;
elseif bg.Buttons(2).Value == 1
Opt1_label.Enable=0;
Opt1_field.Enable=0;
Opt2_label.Enable=1;
Opt2_field.Enable=1;
end
end
ENABLE/DISABLE IF语句独立工作,但我不知道如何让它作为回调工作。选项2没有被禁用,即使在默认情况下首先选择了选项1,如果我选择了另一个单选按钮,要么什么都没有改变,要么我会收到一个错误,告诉我找不到使能句柄。
如有任何想法,我们将不胜感激!
1条答案
按热度按时间2exbekwf1#
您已将函数
bgselection()
配置为UI元素的回调函数。回调函数对输入参数有两个特定规则:1.第一个参数必须是调用函数的对象的句柄,第二个参数必须是回调事件的“
eventData
”。因此,在您的函数中,参数Opt1_label
被视为eventData
变量。由于它没有该变量中预期的信息,因此出现了错误。因此,要遵循此规则,请将您的函数定义更改为:函数b选择(BG、EventData、OPT1_LABEL、OPT1_FIELD、OPT2_LABEL、OPT2_FIELD)
1.第二条规则是,如果您希望拥有超过所需的两个输入参数,则需要在将函数分配给对象时将它们列在单元格数组中。因此,在您的案例中,定义uiButton组如下所示:
Bg=uiButtongroup(图,‘位置’,[140 290 200 51],‘SelectionChangedFcn’,{@b选择,OPT1_LABEL,OPT1_FIELD,OPT2_LABEL,OPT2_FIELD});
您必须将
Opt1_, Opt2_
等的定义移到bg
语句之前,以便它们存在并可以包含在单元数组中。您可以查看此here的文档。还有其他几种传递参数的方法,但这些是最常用的方法。
此外,
eventData
还包含一些有用的信息,例如所选按钮的标签。尝试将disp(eventData)
添加到该函数,以查看其中包含的内容。