将多个GUIdata集保存到列表框,然后在MATLAB中再次加载它们

时间:2014-10-06 14:10:21

标签: matlab user-interface listbox matlab-guide

我在MATLAB GUIDE中构建了一个计算软件。我想要做的是在不同的编辑字段和一些下拉列表中填写我的所有计算数据,当我按下计算时,“listbox”应填充文本“Calculation 1”。

如果我然后更改某些输入字段中的某些数据并再次按下计算,我想在“计算1”等下面填入“计算2”的列表框...

但后来我希望能够在列表框中再次高亮显示“计算1”并按下“加载输入参数”按钮,用计算“计算1”时使用的数据填充所有编辑输入字段。

我为此寻找了所有地方,却找不到任何东西。

//罗宾

1 个答案:

答案 0 :(得分:1)

这是一些非常基本的代码,但可以执行您正在寻找的代码。有很多可能的调整,但我会让你玩它们。我把解释作为评论。您可以将过去复制到Matlab并根据需要更改GUI。

function CalculatorGUI

% Dummy GUI to calculate A*B + C...
clc
clear 
close all

global hTestResult hEditA hEditB hEditC CalculationList CalculationStrings

% Set up controls
CalculationList = nan(10,3); % Create array in which we store the parameters. 1st column is A, 2nd is B and 3rd is C.
CalculationStrings = cell(10,1);

ScreenSize = get(0,'ScreenSize');

hFig = figure('Visible','off','Position',[ScreenSize(3)/2,ScreenSize(4)/2,450,285]);

hCalculateButton = uicontrol('Style','Pushbutton','Position',[350,150,80,30],'String','Calculate!','Callback',@CalculateCallback);

hTitle = uicontrol('Style','Text','Position',[100,250,100,25],'String','Calculate (A * B) + C');

hTextA = uicontrol('Style','Text','Position',[125,220,70,25],'String','A');
hEditA = uicontrol('Style','Edit','Position',[125,200,70,25],'String','1');

hTextB = uicontrol('Style','Text','Position',[200,220,70,25],'String','B');
hEditB = uicontrol('Style','Edit','Position',[200,200,70,25],'String','2');

hTextC = uicontrol('Style','Text','Position',[275,220,70,25],'String','C');
hEditC = uicontrol('Style','Edit','Position',[275,200,70,25],'String','3');

hResultHeader = uicontrol('Style','Text','Position',[350,220,70,25],'String','Result');
hTestResult = uicontrol('Style','Text','Position',[350,200,70,25],'String','');


hTextCalcu = uicontrol('Style','Text','Position',[100,140,100,50],'String','Calculations');
hListCalcu = uicontrol('Style','Listbox','String','','Position',[100,120,200,50],'max',10,...
    'min',1,'Callback',@ListBox_Callback);

set(hFig,'Visible','on')
%======================================================================
%======================================================================

% Callback of the pushbutton
    function CalculateCallback(~,~)

        % Get the values in the edit boxes. There is no ckechup to make
        % sure the user entered a correct value...
        A = str2double(get(hEditA,'String'));
        B = str2double(get(hEditB,'String'));
        C = str2double(get(hEditC,'String'));

        Calculation = A*B+C;

        % Display the result.
        set(hTestResult,'String',sprintf('The result is %0.2f',Calculation));        

        % Find how many calculations have been performed and append the
        % parameters to the current list

       [x,~] = find(~isnan(CalculationList));
       CurrentCalc = numel(unique(x)); % Get number of rows which are NOT NaNs.

       CurrentValues = [A B C];


       CalculationList(CurrentCalc+1,:) = CurrentValues;
       CurrentString = sprintf('A = %0.2f B = %0.2f C = %0.2f',A,B,C);

      % Assign the parameters to the cell array.
       CalculationStrings(CurrentCalc+1) = {CurrentString};
       set(hListCalcu,'String',CalculationStrings)

    end

% Listbox callback: When the selection changes, the corresponding
% parameters in the edit boxes change.

    function ListBox_Callback(~,~)

        SelectedCalc = get(hListCalcu,'Value');

        CalculationList(SelectedCalc,1)
        CalculationList(SelectedCalc,2)
        CalculationList(SelectedCalc,3)

        set(hEditA,'String',CalculationList(SelectedCalc,1));
        set(hEditB,'String',CalculationList(SelectedCalc,2));
        set(hEditC,'String',CalculationList(SelectedCalc,3));
    end

end

实际界面如下所示:

enter image description here

当然,你可以使它更复杂,但这应该有助于你开始并理解不同的回调如何协同工作。玩得开心!