【APPdesigner】使用appdesigner设计的一个潮流计算器

基本面板组成

使用APPdesinger自带的菜单栏、工具栏、三个表、一个面板、一个坐标区、两个文本编辑字段以及若干个标签等组件。菜单栏中可进行新建、加载、保存等操作。工具栏用于选择所绘制的目标,以及开始潮流计算。三个表分别展示已经绘制的节点、导线、变压器的信息,面板为坐标区的父图窗,用于固定坐标区位置及属性。两个文本编辑字段用于展示所选节点和所选工具。
主界面

多窗口组成

分为主界面、用于填写节点信息的Node Data界面、用于填写导线信息的Transm Line Data界面、用于填写变压器信息的Transformer Data界面,以及展示潮流计算结果的Result界面。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

功能实现

(1)节点绘制

通过app.UIFigure.CurrentPoint属性获得鼠标在图窗中的位置,再在该位置创建一个uiimage实体,并在该实体的ImageClickedFcn属性下,通过createCallbackFcn添加节点回调函数。

function DrawImage(app,x,y,pen)
            switch pen
                case 1
                    DrawNode(app,x,y);                      %画点
                    
                    app.UITable.Data = app.node{2}(:,3:12);     %更新表
                    
                case 2
                    DrawTransf(app,x,y);
                
                case 3
                    DrawLine(app,x,y);
            end
            
        end
        %画节点
        %app.node{3}为元胞数组,每个cell记录一个imgae对象,用于删除和修改属性
        function DrawNode(app,x,y)
            app.node{1}=app.node{1}+1;              %计数
            app.node{2}=[app.node{2};zeros(1,13)];   %添加新行
            app.node{2}(app.node{1},1:2)=[x y];     %记录点坐标
            app.node{2}(app.node{1},3)=app.node{1}; %记录点的编号
                    
            app.node{3}{app.node{1}} = uiimage(app.Panel);
            app.node{3}{app.node{1}}.ImageClickedFcn = createCallbackFcn(app, @NodeClicked, true);
            app.node{3}{app.node{1}}.Position = [x-app.nodeimgw/2 y-app.nodeimgh/2 30 30];
            app.node{3}{app.node{1}}.ImageSource = 'node.png';
        end

(2)导线和变压器绘制

通过点选两个不同位置的节点以确定所要绘制的线段的起始点和终止点坐标,再将该坐标通过比例转换为坐标区的坐标,随后使用plot函数创建线段实体,并在该实体的ButtonDownFcn属性下通过createCallbackFcn函数添加相应的回调函数。

%画变压器
        function DrawTransf(app,x,y)
            persistent i;
            persistent p1;
            
            if isempty(i)
                i=1;        %初始化i
                p1=0;
            end
            
%             app.UIAxes.Visible = 'on';
%             [ax,ay] = MousePointInAxis(app);
%             app.UIAxes.Visible = 'off';
            
            if i == 1
                p1 = app.SelectedPoint;
%                app.SelectedPointEditField.Value = num2str(p1);
                i = i+1;
            elseif i == 2
                p2 = app.SelectedPoint;
                %避免重复
                for i=1:app.transf{1}
                    if (app.node{2}(p1,3) == app.transf{2}(i,1) && app.node{2}(p2,3) == app.transf{2}(i,2))...
                     ||(app.node{2}(p1,3) == app.transf{2}(i,2) && app.node{2}(p2,3) == app.transf{2}(i,1))
                        i=1;
                        return;
                    end
                end
                
                for i=1:app.line{1}
                    if (app.node{2}(p1,3) == app.line{2}(i,1) && app.node{2}(p2,3) == app.line{2}(i,2))...
                     ||(app.node{2}(p1,3) == app.line{2}(i,2) && app.node{2}(p2,3) == app.line{2}(i,1))
                        i=1;
                        return;
                    end
                end
                
                if p1 ~= p2 %不能是同一个点
                   x1 = (app.node{2}(p1,1)/1003);
                   y1 = (app.node{2}(p1,2)/599);
                   x2 = (app.node{2}(app.SelectedPoint,1)/1003);
                   y2 = (app.node{2}(app.SelectedPoint,2)/599);
                   
                   app.transf{1} = app.transf{1} + 1;
                   app.transf{2} = [app.transf{2};zeros(1,9)];
                   app.transf{2}(app.transf{1},8) = 220;
                   app.transf{2}(app.transf{1},9) = 220;
                   if(app.node{2}(p1,3) < app.node{2}(p2,3))
                       app.transf{2}(app.transf{1},1:2)=[app.node{2}(p1,3),app.node{2}(p2,3)];
                   else
                       app.transf{2}(app.transf{1},1:2)=[app.node{2}(p2,3),app.node{2}(p1,3)];
                   end
                   
                   app.transf{3}(app.transf{1})=plot(app.UIAxes,[x1,x2],[y1,y2],"LineStyle","-","LineWidth",3,"Color",'r');
                   app.transf{3}(app.transf{1}).ButtonDownFcn = createCallbackFcn(app,@TransfClicked,true);
                   hold(app.UIAxes,"on");
                   
                   app.UITable3.Data = app.transf{2};
                   
                   i = 1;
                else
                    i=1;
                    return;
                end
            end
        end
        
        %画线
        function DrawLine(app,x,y)
            persistent i;
            persistent p1;
            
            if isempty(i)
                i=1;        %初始化i
                p1=0;
            end
            
%             app.UIAxes.Visible = 'on';
%             [ax,ay] = MousePointInAxis(app);
%             app.UIAxes.Visible = 'off';
            
            if i == 1
                p1 = app.SelectedPoint;
%                app.SelectedPointEditField.Value = num2str(p1);
                i = i+1;
            elseif i == 2
                p2 = app.SelectedPoint;
                %避免重复
                for i=1:app.line{1}
                    if (app.node{2}(p1,3) == app.line{2}(i,1) && app.node{2}(p2,3) == app.line{2}(i,2))...
                     ||(app.node{2}(p1,3) == app.line{2}(i,2) && app.node{2}(p2,3) == app.line{2}(i,1))
                        i=1;
                        return;
                    end
                end
                
                for i=1:app.transf{1}
                    if (app.node{2}(p1,3) == app.transf{2}(i,1) && app.node{2}(p2,3) == app.transf{2}(i,2))...
                     ||(app.node{2}(p1,3) == app.transf{2}(i,2) && app.node{2}(p2,3) == app.transf{2}(i,1))
                        i=1;
                        return;
                    end
                end
                
                if p1 ~= p2 %不能是同一个点
                   x1 = (app.node{2}(p1,1)/1003);
                   y1 = (app.node{2}(p1,2)/599);
                   x2 = (app.node{2}(app.SelectedPoint,1)/1003);
                   y2 = (app.node{2}(app.SelectedPoint,2)/599);

                   
                   app.line{1} = app.line{1} + 1;
                   app.line{2} = [app.line{2};zeros(1,7)];
                   app.line{2}(app.line{1},7) = 1;
                   if(app.node{2}(p1,3) < app.node{2}(p2,3))
                       app.line{2}(app.line{1},1:2)=[app.node{2}(p1,3),app.node{2}(p2,3)];
                   else
                       app.line{2}(app.line{1},1:2)=[app.node{2}(p2,3),app.node{2}(p1,3)];
                   end
                   
                   app.line{3}(app.line{1})=plot(app.UIAxes,[x1,x2],[y1,y2],"LineStyle","-","LineWidth",3,"Color",'b');
                   app.line{3}(app.line{1}).ButtonDownFcn = createCallbackFcn(app,@LineClicked,true);
                   hold(app.UIAxes,"on");
                   
                   app.UITable2.Data = app.line{2}(:,1:7);
                   i = 1;
                else
                    i=1;
                    return;
                end
            end
        end

(3)数据添加

在鼠标点击选择目标后,通过回调函数打开相应的数据填写图窗,同时将原有数据传给图窗,在图窗中填写完信息并点击Save后通过DataUpdata_node、DataUpdata_line、DataUpdata_transf等函数将数据传回主窗口并存放在各类数据矩阵中。

 %更新node数据
        %seq-序号;type-节点类型;
        function DataUpdata_node(app,seq,type,Pd,Qd,Gs,Bs,Vm,Va,Gen,Pg,Qg)
            app.node{2}(app.SelectedPoint,3)=seq;
            app.node{2}(app.SelectedPoint,4)=type;
            app.node{2}(app.SelectedPoint,5)=Pd;
            app.node{2}(app.SelectedPoint,6)=Qd;
            app.node{2}(app.SelectedPoint,7)=Gs;
            app.node{2}(app.SelectedPoint,8)=Bs;
            app.node{2}(app.SelectedPoint,9)=Vm;
            app.node{2}(app.SelectedPoint,10)=Va;
            
            app.node{2}(app.SelectedPoint,11)=Gen;
            app.node{2}(app.SelectedPoint,12)=Pg;
            app.node{2}(app.SelectedPoint,13)=Qg;
            app.UITable.Data = app.node{2}(:,3:13);     %更新表
        end
        
        %更新line数据
        %
        function DataUpdata_line(app,rou,req,Dm,L,n)
            app.line{2}(app.SelectedLine,3)=rou;
            app.line{2}(app.SelectedLine,4)=req;
            app.line{2}(app.SelectedLine,5)=Dm;
            app.line{2}(app.SelectedLine,6)=L;
            app.line{2}(app.SelectedLine,7)=n;
            
            app.UITable2.Data = app.line{2}(:,1:7);
        end
        
        %更新transf数据
        %
        function DataUpdata_transf(app,Sn,Pk,Uk,Po,Io,Uf,Us)
            app.transf{2}(app.SelectedTransf,3)=Sn;
            app.transf{2}(app.SelectedTransf,4)=Pk;
            app.transf{2}(app.SelectedTransf,5)=Uk;
            app.transf{2}(app.SelectedTransf,6)=Po;
            app.transf{2}(app.SelectedTransf,7)=Io;
            app.transf{2}(app.SelectedTransf,8)=Uf;
            app.transf{2}(app.SelectedTransf,9)=Us;
            
            app.UITable3.Data = app.transf{2};
        end

(4)保存

通过save函数生成nodedata.txt和linedata.txt分别存放节点数据和导线以及变压器信息。

 %保存数据
        function [file,path] = SaveFile_txt(app)
            [file,path] = uiputfile('*.txt','NodeData','NodeData.txt');
            filename = fullfile(path,file);
            
            if isequal(file,0) || isequal(path,0)
                disp('User clicked Cancel.')
            else
                nodedata = []
                nodepoint = []
                for i=1:app.node{1}
                    for j=1:app.node{1}
                        if app.node{2}(j,3) == i
                            nodedata = [nodedata;app.node{2}(j,3:6),app.node{2}(j,11:12),app.node{2}(j,7:10)];
                            nodepoint = [nodepoint;app.node{2}(j,1:2)];
                        end
                    end
                end
                save(filename,'nodedata',"-ascii");
                save("NodePoint.txt",'nodepoint',"-ascii");
            end
            
            [file,path] = uiputfile('*.txt','LineData','LineData.txt');
            filename = fullfile(path,file);
            if isequal(file,0) || isequal(path,0)
                disp('User clicked Cancel.')
            else
                linedata = [app.line{2},zeros(app.line{1},2);app.transf{2}];
                save(filename,'linedata',"-ascii");
            end
        end

(5)加载

通过load函数读取nodedata.txt和linedata.txt获得节点数据和导线以及变压器信息,并绘制相应图像。

function Openfile_txt(app)
            [file,path] = uigetfile('*.txt');
            filename = fullfile(path,file);
            
            if isequal(file,0) || isequal(path,0)
                disp('User clicked Cancel.')
            else
                if strcmp(file,'NodeData.txt') == 1
                    content=load(filename);
                    [m,~] = size(content);
                    app.node{1} = m;
                    app.node{2} = zeros(m,13);
                    app.node{2}(:,3:6) = content(:,1:4);
                    app.node{2}(:,7:10) = content(:,7:10);
                    app.node{2}(:,11:12) = content(:,5:6);
                    
                    content=load("NodePoint.txt");
                    [m,~] = size(content);
                    app.node{2}(:,1:2) = content;
                    for i=1:m
                        app.node{3}{i} = uiimage(app.Panel);
                        app.node{3}{i}.ImageClickedFcn = createCallbackFcn(app, @NodeClicked, true);
                        app.node{3}{i}.Position = [app.node{2}(i,1)-app.nodeimgw/2 app.node{2}(i,2)-app.nodeimgh/2 30 30];
                        app.node{3}{i}.ImageSource = 'node.png';
                    end
                    app.UITable.Data = app.node{2}(:,3:12);
                elseif strcmp(file,'LineData.txt') == 1
                    content=load(filename);
                    [m,~] = size(content);
                    i = 1;
                    while ~content(i,8)
                        i=i+1;
                        if i>m
                            break;
                        end
                    end
                    i = i - 1;
                    app.line{1} = i;
                    app.line{2} = zeros(i,7);
                    app.line{2} = content(1:i,1:7);
                    for j=1:app.line{1}                       
                        x1 = (app.node{2}(app.line{2}(j,1),1)/1003);
                        y1 = (app.node{2}(app.line{2}(j,1),2)/599);
                        x2 = (app.node{2}(app.line{2}(j,2),1)/1003);
                        y2 = (app.node{2}(app.line{2}(j,2),2)/599);
                        app.line{3}(j)=plot(app.UIAxes,[x1,x2],[y1,y2],"LineStyle","-","LineWidth",3,"Color",'b');
                        app.line{3}(j).ButtonDownFcn = createCallbackFcn(app,@LineClicked,true);
                        hold(app.UIAxes,"on");
                    end
                    app.UITable2.Data = app.line{2}(:,1:7);
                    
                    app.transf{1} = m-i;
                    app.transf{2} = zeros(m-i,9);
                    app.transf{2} = content(i+1:m,1:9);
                    for j=1:app.transf{1}
                        x1 = (app.node{2}(app.transf{2}(j,1),1)/1003);
                        y1 = (app.node{2}(app.transf{2}(j,1),2)/599);
                        x2 = (app.node{2}(app.transf{2}(j,2),1)/1003);
                        y2 = (app.node{2}(app.transf{2}(j,2),2)/599);
                        app.transf{3}(j)=plot(app.UIAxes,[x1,x2],[y1,y2],"LineStyle","-","LineWidth",3,"Color",'r');
                        app.transf{3}(j).ButtonDownFcn = createCallbackFcn(app,@TransfClicked,true);
                        hold(app.UIAxes,"on");
                    end
                    app.UITable3.Data = app.transf{2};
                    
                end
             end
        end

(6)运行潮流计算

先保存两个名为nodedata.txt和linedata.txt的文件,随后使用py.importlib.import_module调用算法程序,再打开result窗口展示运算结果。

			SaveFile_txt(app);
            obj = py.importlib.import_module('runpf');
            py.importlib.reload(obj);
            obj.runpf();
            run result_info.mlapp;

数据结构

(1)节点数据

使用matlab特有的元组,创建一个名为node的1*3元组。在node{1}中记录节点个数,每次绘制节点或删除节点时进行加一或减一;在node{2}中创建一个矩阵,矩阵初始长度为1*13,每列分别记录节点的figure横坐标、figure纵坐标、序号、节点类型、Pd、Qd、Gs、Bs、Vm、Va、Gen、Pg、Qg,在每次绘制节点或删除节点时添加一行或删除某一行;node{3}用于存放每次绘制图像时创建的实体。

(2)导线数据

同样使用元组,创建一个名为line的1*3元组。line{1}中记录导线个数,每次绘制导线或删除导线时进行加一或减一;line{2}中创建一个初始为1*7的矩阵,每列分别记录fbus、sbus、ρ、req、Dm、L、n,在每次绘制导线或删除导线时添加一行或删除某一行;line{3}用于存放每次绘制线段时创建的实体。

(3)变压器数据

同样使用元组,创建一个名为transf的1*3元组。transf{1}中记录导线个数,每次绘制导线或删除导线时进行加一或减一;transf{2}中创建一个初始为1*9的矩阵,每列分别记录fbus、sbus、Sn、Pk、Uk、Po、Io、Uf、Us,在每次绘制变压器或删除变压器时添加一行或删除某一行;transf{3}用于存放每次绘制线段时创建的实体。

(4)整数类型pen

Pen变量用于存放所选绘制图像,在选择工具时改变。

(5)选择目标

SelectedPoint、SelectedLine、SelectedTransf通过PickOn函数,使用传入的各类实体句柄确定所选目标。

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计一个简单的计算需要以下步骤: 1. 打开 Matlab 中的 App Designer 工具,创建一个新的 App。 2. 在 App Designer 界面中添加两个 UI 组件:一个用于显示计算结果的文本框(Text),一个用于输入计算表达式的编辑框(Edit Field)。 3. 添加数字按钮和运算符按钮。可以使用按钮组件(Button Group)来组织各种按钮。为了使计算更加美观,可以使用 MATLAB 的内置图标库,如“plus”,“minus”,“times”和“divide”等。 4. 为每个按钮添加回调函数。这些回调函数将在用户单击按钮时执行。例如,单击数字按钮时,将数字添加到编辑框中;单击运算符按钮时,将运算符添加到编辑框中。 5. 为“=”按钮添加回调函数。该函数将使用 eval 函数计算编辑框中的表达式,并将结果显示在文本框中。 6. 测试计算应用程序。运行应用程序并测试各种功能,例如输入数字、运算符和计算表达式。 下面是一个简单的示例代码: ```matlab classdef CalculatorApp < matlab.apps.AppBase % Properties that correspond to app components properties (Access = public) UIFigure matlab.ui.Figure ResultText matlab.ui.control.Label ExpressionEditField matlab.ui.control.EditField ButtonGroup matlab.ui.container.ButtonGroup NumButton1 matlab.ui.control.Button NumButton2 matlab.ui.control.Button NumButton3 matlab.ui.control.Button NumButton4 matlab.ui.control.Button NumButton5 matlab.ui.control.Button NumButton6 matlab.ui.control.Button NumButton7 matlab.ui.control.Button NumButton8 matlab.ui.control.Button NumButton9 matlab.ui.control.Button NumButton0 matlab.ui.control.Button PlusButton matlab.ui.control.Button MinusButton matlab.ui.control.Button TimesButton matlab.ui.control.Button DivideButton matlab.ui.control.Button EqualsButton matlab.ui.control.Button end % Callbacks that handle component events methods (Access = private) % Button pushed function: NumButton1 function NumButton1Pushed(app, event) appendText(app, '1'); end % Button pushed function: NumButton2 function NumButton2Pushed(app, event) appendText(app, '2'); end % Button pushed function: NumButton3 function NumButton3Pushed(app, event) appendText(app, '3'); end % Button pushed function: NumButton4 function NumButton4Pushed(app, event) appendText(app, '4'); end % Button pushed function: NumButton5 function NumButton5Pushed(app, event) appendText(app, '5'); end % Button pushed function: NumButton6 function NumButton6Pushed(app, event) appendText(app, '6'); end % Button pushed function: NumButton7 function NumButton7Pushed(app, event) appendText(app, '7'); end % Button pushed function: NumButton8 function NumButton8Pushed(app, event) appendText(app, '8'); end % Button pushed function: NumButton9 function NumButton9Pushed(app, event) appendText(app, '9'); end % Button pushed function: NumButton0 function NumButton0Pushed(app, event) appendText(app, '0'); end % Button pushed function: PlusButton function PlusButtonPushed(app, event) appendText(app, '+'); end % Button pushed function: MinusButton function MinusButtonPushed(app, event) appendText(app, '-'); end % Button pushed function: TimesButton function TimesButtonPushed(app, event) appendText(app, '*'); end % Button pushed function: DivideButton function DivideButtonPushed(app, event) appendText(app, '/'); end % Button pushed function: EqualsButton function EqualsButtonPushed(app, event) expression = app.ExpressionEditField.Value; result = eval(expression); app.ResultText.Text = num2str(result); end end % App initialization and construction methods (Access = private) % Code that executes after component creation function startupFcn(app) % Initialize the result text app.ResultText.Text = '0'; end % Append text to the expression edit field function appendText(app, text) currentValue = app.ExpressionEditField.Value; app.ExpressionEditField.Value = strcat(currentValue, text); end end % Component initialization methods (Access = private) % Create UIFigure and components function createComponents(app) % Create UIFigure and hide until all components are created app.UIFigure = uifigure('Visible', 'off'); app.UIFigure.Position = [100 100 640 480]; app.UIFigure.Name = 'Calculator'; % Create ResultText app.ResultText = uilabel(app.UIFigure); app.ResultText.HorizontalAlignment = 'right'; app.ResultText.FontSize = 20; app.ResultText.FontWeight = 'bold'; app.ResultText.Position = [51 386 532 37]; app.ResultText.Text = '0'; % Create ExpressionEditField app.ExpressionEditField = uieditfield(app.UIFigure, 'text'); app.ExpressionEditField.HorizontalAlignment = 'right'; app.ExpressionEditField.FontSize = 20; app.ExpressionEditField.FontWeight = 'bold'; app.ExpressionEditField.Position = [51 340 532 37]; % Create ButtonGroup app.ButtonGroup = uibuttongroup(app.UIFigure); app.ButtonGroup.SelectionChangedFcn = createCallbackFcn(app, @ButtonGroupSelectionChanged, true); app.ButtonGroup.TitlePosition = 'centertop'; app.ButtonGroup.FontSize = 20; app.ButtonGroup.FontWeight = 'bold'; app.ButtonGroup.Position = [51 77 532 251]; app.ButtonGroup.BorderType = 'none'; % Create NumButton1 app.NumButton1 = uibutton(app.ButtonGroup, 'push'); app.NumButton1.FontSize = 20; app.NumButton1.FontWeight = 'bold'; app.NumButton1.Position = [17 186 80 80]; app.NumButton1.Text = '1'; app.NumButton1.ButtonPushedFcn = createCallbackFcn(app, @NumButton1Pushed, true); % Create NumButton2 app.NumButton2 = uibutton(app.ButtonGroup, 'push'); app.NumButton2.FontSize = 20; app.NumButton2.FontWeight = 'bold'; app.NumButton2.Position = [117 186 80 80]; app.NumButton2.Text = '2'; app.NumButton2.ButtonPushedFcn = createCallbackFcn(app, @NumButton2Pushed, true); % Create NumButton3 app.NumButton3 = uibutton(app.ButtonGroup, 'push'); app.NumButton3.FontSize = 20; app.NumButton3.FontWeight = 'bold'; app.NumButton3.Position = [217 186 80 80]; app.NumButton3.Text = '3'; app.NumButton3.ButtonPushedFcn = createCallbackFcn(app, @NumButton3Pushed, true); % Create NumButton4 app.NumButton4 = uibutton(app.ButtonGroup, 'push'); app.NumButton4.FontSize = 20; app.NumButton4.FontWeight = 'bold'; app.NumButton4.Position = [17 96 80 80]; app.NumButton4.Text = '4'; app.NumButton4.ButtonPushedFcn = createCallbackFcn(app, @NumButton4Pushed, true); % Create NumButton5 app.NumButton5 = uibutton(app.ButtonGroup, 'push'); app.NumButton5.FontSize = 20; app.NumButton5.FontWeight = 'bold'; app.NumButton5.Position = [117 96 80 80]; app.NumButton5.Text = '5'; app.NumButton5.ButtonPushedFcn = createCallbackFcn(app, @NumButton5Pushed, true); % Create NumButton6 app.NumButton6 = uibutton(app.ButtonGroup, 'push'); app.NumButton6.FontSize = 20; app.NumButton6.FontWeight = 'bold'; app.NumButton6.Position = [217 96 80 80]; app.NumButton6.Text = '6'; app.NumButton6.ButtonPushedFcn = createCallbackFcn(app, @NumButton6Pushed, true); % Create NumButton7 app.NumButton7 = uibutton(app.ButtonGroup, 'push'); app.NumButton7.FontSize = 20; app.NumButton7.FontWeight = 'bold'; app.NumButton7.Position = [17 6 80 80]; app.NumButton7.Text = '7'; app.NumButton7.ButtonPushedFcn = createCallbackFcn(app, @NumButton7Pushed, true); % Create NumButton8 app.NumButton8 = uibutton(app.ButtonGroup, 'push'); app.NumButton8.FontSize = 20; app.NumButton8.FontWeight = 'bold'; app.NumButton8.Position = [117 6 80 80]; app.NumButton8.Text = '8'; app.NumButton8.ButtonPushedFcn = createCallbackFcn(app, @NumButton8Pushed, true); % Create NumButton9 app.NumButton9 = uibutton(app.ButtonGroup, 'push'); app.NumButton9.FontSize = 20; app.NumButton9.FontWeight = 'bold'; app.NumButton9.Position = [217 6 80 80]; app.NumButton9.Text = '9'; app.NumButton9.ButtonPushedFcn = createCallbackFcn(app, @NumButton9Pushed, true); % Create NumButton0 app.NumButton0 = uibutton(app.ButtonGroup, 'push'); app.NumButton0.FontSize = 20; app.NumButton0.FontWeight = 'bold'; app.NumButton0.Position = [117 276 80 80]; app.NumButton0.Text = '0'; app.NumButton0.ButtonPushedFcn = createCallbackFcn(app, @NumButton0Pushed, true); % Create PlusButton app.PlusButton = uibutton(app.ButtonGroup, 'push'); app.PlusButton.FontSize = 20; app.PlusButton.FontWeight = 'bold'; app.PlusButton.Position = [317 186 80 80]; app.PlusButton.Text = '+'; app.PlusButton.ButtonPushedFcn = createCallbackFcn(app, @PlusButtonPushed, true); % Create MinusButton app.MinusButton = uibutton(app.ButtonGroup, 'push'); app.MinusButton.FontSize = 20; app.MinusButton.FontWeight = 'bold'; app.MinusButton.Position = [317 96 80 80]; app.MinusButton.Text = '-'; app.MinusButton.ButtonPushedFcn = createCallbackFcn(app, @MinusButtonPushed, true); % Create TimesButton app.TimesButton = uibutton(app.ButtonGroup, 'push'); app.TimesButton.FontSize = 20; app.TimesButton.FontWeight = 'bold'; app.TimesButton.Position = [317 6 80 80]; app.TimesButton.Text = '*'; app.TimesButton.ButtonPushedFcn = createCallbackFcn(app, @TimesButtonPushed, true); % Create DivideButton app.DivideButton = uibutton(app.ButtonGroup, 'push'); app.DivideButton.FontSize = 20; app.DivideButton.FontWeight = 'bold'; app.DivideButton.Position = [417 6 80 80]; app.DivideButton.Text = '/'; app.DivideButton.ButtonPushedFcn = createCallbackFcn(app, @DivideButtonPushed, true); % Create EqualsButton app.EqualsButton = uibutton(app.ButtonGroup, 'push'); app.EqualsButton.FontSize = 20; app.EqualsButton.FontWeight = 'bold'; app.EqualsButton.Position = [417 96 80 80]; app.EqualsButton.Text = '='; app.EqualsButton.ButtonPushedFcn = createCallbackFcn(app, @EqualsButtonPushed, true); % Show the figure after all components are created app.UIFigure.Visible = 'on'; end end % App creation and deletion methods (Access = public) % Construct app function app = CalculatorApp % Create UIFigure and components createComponents(app) % Register the app with App Designer registerApp(app, app.UIFigure) % Execute the startup function runStartupFcn(app, @startupFcn) % Show the figure if nargout == 0 clear app app.UIFigure.Visible = 'on'; end end % Code that executes before app deletion function delete(app) % Delete UIFigure when app is deleted delete(app.UIFigure) end end end ``` 这是一个简单的计算应用程序,可以添加更多功能来提高其计算能力和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值