所以我已经在这个GUI上工作了一段时间,最近完成了一个原型,你可以输入电阻,电感和电容来获得质量因子,并使用公式来计算共振频率。我现在要做的是创建一个接受不同集合的GUI来查找缺失值。例如:给定q因子,电阻和电感。我根据用户输入的内容制作了一个我想切换的弹出按钮。我是GUI编程的新手,所以我想知道是否在弹出按钮之后创建一个巨大的If语句是最简单的方法。例如:if(RCL)... if(QLR)...当然这会让我为每个设置键入大量代码,所以我想知道是否有更简单的方法。提前致谢。
在我的gui中,我有5个编辑文本框,一个弹出按钮和一个图形。我想要发生的是让用户根据他们的输入选择他们拥有的设置,并为剩余的编辑框显示其他值。因此,如果他们选择RCL设置,我希望程序获取RCL输入,并计算W和Q,然后在正确的编辑文本框中显示它们。我希望这是可塑的,所以我做了一些其他设置,如用户可以选择的CLW或QRL,这样他们就可以得到缺失的变量。该图将是使用RCL值的传递函数的波特图。主要问题是对于每个设置,使用相同方程的不同形式来计算缺失值。有没有办法调用我需要的特定案例的函数,并获得我需要的任何地方的值?
答案 0 :(得分:0)
我仍然没有百分之百地遵循你正在寻找的东西,但希望这会让你朝着正确的方向前进:
function testGUI
% Initialize dummy GUI
h.mainwindow = figure( ... % Main figure window
'Units','pixels', ...
'Position',[100 100 400 400], ...
'MenuBar','none', ...
'ToolBar','none', ...
'Resize', 'off' ...
);
h.var1box = uicontrol( ...
'Parent', h.mainwindow, ...
'Style', 'edit', ...
'Units', 'Normalized', ...
'Position', [0.4 0.5 0.2 0.1], ...
'String', '0' ...
);
h.var2box = uicontrol( ...
'Parent', h.mainwindow, ...
'Style', 'edit', ...
'Units', 'Normalized', ...
'Position', [0.4 0.3 0.2 0.1], ...
'String', '0' ...
);
h.var3box = uicontrol( ...
'Parent', h.mainwindow, ...
'Style', 'edit', ...
'Units', 'Normalized', ...
'Position', [0.4 0.1 0.2 0.1], ...
'String', '', ...
'Enable', 'off' ...
);
h.var1label = uicontrol( ...
'Parent', h.mainwindow, ...
'Style', 'text', ...
'Units', 'Normalized', ...
'Position', [0.4 0.6 0.2 0.05], ...
'String', 'Var1' ...
);
h.var2label = uicontrol( ...
'Parent', h.mainwindow, ...
'Style', 'text', ...
'Units', 'Normalized', ...
'Position', [0.4 0.4 0.2 0.05], ...
'String', 'Var2' ...
);
h.var3label = uicontrol( ...
'Parent', h.mainwindow, ...
'Style', 'text', ...
'Units', 'Normalized', ...
'Position', [0.4 0.2 0.2 0.05], ...
'String', 'Var3' ...
);
h.dropdown = uicontrol( ...
'Parent', h.mainwindow, ...
'Style', 'popupmenu', ...
'Units', 'Normalized', ...
'Position', [0.3 0.7 0.4 0.05], ...
'String', {'Var1'; 'Var2'; 'Var3'}, ...
'Value', 3, ...
'Callback', {@vartoggle, h} ...
);
h.dropdownlabel = uicontrol( ...
'Parent', h.mainwindow, ...
'Style', 'text', ...
'Units', 'Normalized', ...
'Position', [0.3 0.75 0.4 0.05], ...
'String', 'Variable to solve for?' ...
);
h.calculatebutton = uicontrol( ...
'Parent', h.mainwindow, ...
'Style', 'pushbutton', ...
'Units', 'Normalized', ...
'Position', [0.72 0.7 0.2 0.05], ...
'String', 'Calculate', ...
'Callback', {@calcdata, h} ...
);
end
function vartoggle(eventdata, ~, h)
% Execute on change in dropdown menu, enable/disable edit boxes
% appropriately
switch eventdata.Value
case 1
% Solve for variable 1
h.var1box.Enable = 'off';
h.var2box.Enable = 'on';
h.var3box.Enable = 'on';
h.var1box.String = '';
h.var2box.String = '0';
h.var3box.String = '0';
case 2
% Solve for variable 2
h.var1box.Enable = 'on';
h.var2box.Enable = 'off';
h.var3box.Enable = 'on';
h.var1box.String = '0';
h.var2box.String = '';
h.var3box.String = '0';
case 3
% Solve for variable 3
h.var1box.Enable = 'on';
h.var2box.Enable = 'on';
h.var3box.Enable = 'off';
h.var1box.String = '0';
h.var2box.String = '0';
h.var3box.String = '';
end
end
function calcdata(~, ~, h)
% Execute when calculate button is pressed, calculate missing value
% Asssumes Var1 + Var2 = Var 3 for this example
switch h.dropdown.Value
case 1
% Solve for variable 1
B = str2double(h.var2box.String);
C = str2double(h.var3box.String);
A = C - B;
h.var1box.String = A;
case 2
% Solve for variable 2
A = str2double(h.var1box.String);
C = str2double(h.var3box.String);
B = C - A;
h.var2box.String = B;
case 3
% Solve for variable 3
A = str2double(h.var1box.String);
B = str2double(h.var2box.String);
C = A + B;
h.var3box.String = C;
end
end
这样做可以让用户指定要解决的数量,并相应地更新修改编辑框的能力。单击“计算”按钮后,将计算缺失值。