使用GUI弹出按钮(matlab)进行不同设置

时间:2015-07-20 16:04:51

标签: matlab user-interface popupmenu

所以我已经在这个GUI上工作了一段时间,最近完成了一个原型,你可以输入电阻,电感和电容来获得质量因子,并使用公式来计算共振频率。我现在要做的是创建一个接受不同集合的GUI来查找缺失值。例如:给定q因子,电阻和电感。我根据用户输入的内容制作了一个我想切换的弹出按钮。我是GUI编程的新手,所以我想知道是否在弹出按钮之后创建一个巨大的If语句是最简单的方法。例如:if(RCL)... if(QLR)...当然这会让我为每个设置键入大量代码,所以我想知道是否有更简单的方法。提前致谢。

在我的gui中,我有5个编辑文本框,一个弹出按钮和一个图形。我想要发生的是让用户根据他们的输入选择他们拥有的设置,并为剩余的编辑框显示其他值。因此,如果他们选择RCL设置,我希望程序获取RCL输入,并计算W和Q,然后在正确的编辑文本框中显示它们。我希望这是可塑的,所以我做了一些其他设置,如用户可以选择的CLW或QRL,这样他们就可以得到缺失的变量。该图将是使用RCL值的传递函数的波特图。主要问题是对于每个设置,使用相同方程的不同形式来计算缺失值。有没有办法调用我需要的特定案例的函数,并获得我需要的任何地方的值?

1 个答案:

答案 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

这样做可以让用户指定要解决的数量,并相应地更新修改编辑框的能力。单击“计算”按钮后,将计算缺失值。