首页 > 解决方案 > 如何使用单选按钮(Matlab GUI)中的选定值?

问题描述

我正在尝试制作电子电路的 GUI,我需要根据电阻和电容计算频率,您可以从包含单选按钮的面板中选择。

function pushbutton1_Callback(hObject, eventdata, handles)
global myDataR
global myDataC

R1=get(handles.radiobutton1,'Value');
R2=get(handles.radiobutton2,'Value');
R3=get(handles.radiobutton3,'Value');
R4=get(handles.radiobutton4,'Value');

if R1
    myDataR.val=1;
elsif R2
    myDataR.val= 2;
elsif R3
    myDataR.val=3;
elsif R4
    myDataR.val=5;
end

C1=get(handles.radiobutton5,'Value');
C2=get(handles.radiobutton6,'Value');
C3=get(handles.radiobutton7,'Value');
C4=get(handles.radiobutton8,'Value');

if C1
    myDataC.val=6;
elsif C2
    myDataC.val=10;
elsif C3
    myDataC.val=15;
elsif C4
    myDataC.val=20;
end

r=myDataR;
c=myDataC;
f=1/(2*pi*r*c);
set(handles.text3,'String',strcat(num2str(f*1000,2),' Hz'))

我在按钮部分编写了这段代码,用于计算和显示频率,但出现错误 ** matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)oscil('pushbutton1_Callback',hObject,eventdata ,guidata(hObject)) 评估 UIControl 回调时出错。**

标签: matlabuser-interfaceradio-button

解决方案


这可能有用也可能没用。它是一个图形用户界面 (GUI),它使用SelectionChangedFcn回调方法/侦听器来找出 和 的值,Resistance因为Capacitance任何单选按钮已被按下。如果您使用Text的不是单选按钮的一组数字,您可能需要相应地解析字符串。

频率计算器 GUI

%******************************************************%
%GUI ELEMENT SETUP/PROPERTIES%
%******************************************************%

global Resistance;
global Capacitance;

%Default values%
Resistance = "10KΩ";
Capacitance = "10µF";

%App figure properties%
App = uifigure();
App.Name = "Resistor and Capacitor Frequency Calculator";
X_Position = 200; Y_Position = 200; Height = 200; Width = 600;
App.Position = [X_Position Y_Position Width Height];

%Container for resistor radio buttons%
Resistor_Button_Group = uibuttongroup('Parent',App);  
X_Position = 50; Y_Position = 25; Height = 150; Width = 150;
Resistor_Button_Group.Position = [X_Position Y_Position Width Height];

%Resistor radio buttons%
X_Position_Button = 10; Y_Position_Button = 20; Height = 15; Width = 140; Offset = Height + 10;
Resistor_1 = uiradiobutton(Resistor_Button_Group,'Position',[X_Position_Button Y_Position_Button Width Height]);
Resistor_1.Text = '5KΩ (Resistor 1)';
Resistor_2 = uiradiobutton(Resistor_Button_Group,'Position',[X_Position_Button Y_Position_Button+Offset Width Height]);
Resistor_2.Text = '10KΩ (Resistor 2)';
Resistor_3 = uiradiobutton(Resistor_Button_Group,'Position',[X_Position_Button Y_Position_Button+2*Offset Width Height]);
Resistor_3.Text = '20KΩ (Resistor 3)';
Resistor_4 = uiradiobutton(Resistor_Button_Group,'Position',[X_Position_Button Y_Position_Button+3*Offset Width Height]);
Resistor_4.Text = '40KΩ (Resistor 4)';

%Container for capacitor radio buttons%
Capacitor_Button_Group = uibuttongroup('Parent',App); 
X_Position = 220; Y_Position = 25; Height = 150; Width = 150;
Capacitor_Button_Group.Position = [X_Position Y_Position Width Height];

%Capacitor radio buttons%
X_Position_Button = 10; Y_Position_Button = 20; Height = 15; Width = 140; Offset = Height + 10;
Capacitor_1 = uiradiobutton(Capacitor_Button_Group,'Position',[X_Position_Button Y_Position_Button Width Height]);
Capacitor_1.Text = '10µF (Capacitor 4)';
Capacitor_2 = uiradiobutton(Capacitor_Button_Group,'Position',[X_Position_Button Y_Position_Button+Offset Width Height]);
Capacitor_2.Text = '1µF (Capacitor 3)';
Capacitor_3 = uiradiobutton(Capacitor_Button_Group,'Position',[X_Position_Button Y_Position_Button+2*Offset Width Height]);
Capacitor_3.Text = '200nF (Capacitor 2)';
Capacitor_4 = uiradiobutton(Capacitor_Button_Group,'Position',[X_Position_Button Y_Position_Button+3*Offset Width Height]);
Capacitor_4.Text = '100nF (Capacitor 1)';


%Callbacks to update the resistance and capacitance upon new selection%
Resistor_Button_Group.SelectionChangedFcn = @Update_Resistance;
Capacitor_Button_Group.SelectionChangedFcn = @Update_Capacitance;

%Function to update the resistance%
function Update_Resistance(~,event)
    global Resistance;
    global Capacitance;
    Resistance_Label = event.NewValue.Text;
    Resistance = strsplit(Resistance_Label," ");
    Resistance = Resistance{1};
    Calculate(Resistance,Capacitance);
end

%Function to update the capacitance%
function Update_Capacitance(~,event)
    global Resistance;
    global Capacitance;
    Capacitance_Label = event.NewValue.Text;
    Capacitance = strsplit(Capacitance_Label," ");
    Capacitance = Capacitance{1};
    Calculate(Resistance,Capacitance);
end

%Function to parse and calculate the frequency%
function Calculate(Resistance,Capacitance)
    disp(Resistance);
    disp(Capacitance);
    disp('----------')
    %Parse the resistance and capacitance strings and calculate frequency%


end

使用 MATLAB R2019b 运行


推荐阅读