matlab - 如何使用单选按钮(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 回调时出错。**
解决方案
这可能有用也可能没用。它是一个图形用户界面 (GUI),它使用SelectionChangedFcn
回调方法/侦听器来找出 和 的值,Resistance
因为Capacitance
任何单选按钮已被按下。如果您使用Text
的不是单选按钮的一组数字,您可能需要相应地解析字符串。
%******************************************************%
%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 运行
推荐阅读
- php - 使用 Levenshtein 距离重新排列单词
- assembly - 如何解决 TASM 中的“假设数据段是 32 位”
- firebase - 未找到 Travis 部署 Firebase 托管文件
- javascript - Style.backgroundColor 或 style.background 没有执行它的功能
- c++ - godot的NetSocket是如何创建实例的?
- python - python url请求响应解码
- mongodb - 本地数据库 + 服务器数据库 - React Native
- r - 错误:更改堆积条形图 ggplot2 中的颜色
- javascript - 如何通过更灵活地渲染其他转储组件来使 React 中的智能组件更加智能
- angular - 如何在返回函数之前等到所有订阅都运行?