我正试图弄清楚如何制作一个带有单选按钮的GUI,该GUI将根据单选按钮的选择启用/禁用选项。下面是我尝试过的一种方法的例子:
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语句可以独立工作,但我不知道如何将其作为回调来工作。即使默认情况下首先选择了选项1,选项2也不会被禁用。如果我选择了另一个单选按钮,要么什么都没有改变,要么我会收到一个错误,说找不到Enable句柄。
任何想法都非常感谢提前感谢!
您已将函数bgselection()
配置为UI元素的回调函数。回调函数对输入参数有两个特定的规则:
-
第一个参数必须是调用函数的对象的句柄,第二个参数必须为"CCD_ 2";用于回调事件。因此,在您的函数中,参数
Opt1_label
被视为eventData
变量。由于它没有该变量中预期的信息,因此存在错误。因此,要遵循此规则,请将函数定义更改为:功能选择(bg、eventData、Opt1_label、Opt1_field、Opt2_label和Opt2_field(
-
第二条规则是,如果您想要超过所需的两个输入参数,则在将函数分配给对象时,需要在单元数组中列出它们。因此,在您的情况下,定义uibuttongroup如下:
bg=uibuttongroup(图,"位置",[140 290 200 51],"SelectionChangedFcn",{@bselection,Opt1_label,Opt1_field,Opt2_label和Opt2_field}(;
您必须将Opt1_, Opt2_
等的定义移动到bg
语句之前,以便它们存在并可以包含在单元数组中。
您可以在此处查看相关文档。传递参数还有其他几个选项,但这些是最常见的方法。
此外,eventData
还有一些有用的信息,例如所选按钮的标签。尝试将disp(eventData)
添加到函数中,以查看其中包含的内容。