[英]matlab app designer load image in new app
您不需要global variable
来在两个应用程序之间共享数据。
在应用程序之间交换数据的一种可能方式是:
在 MainApp 中:
public property
(要与第二个 App 共享的变量)在第二个应用程序中:
private property
来保存来自 MainApp 的输入参数startupFcn
中将输入参数分配给此类属性public properties
,包括您希望从 MainApp 传递给第二个 App 的特定属性此方法的优点之一(但同时也是缺点之一)是您可以修改第二个 App 中的任何 MainApp 公共属性,尤其是输入参数
如果您不想(不需要)给第二个 App 修改 MainApp 属性的可能性:
在主应用程序中:
private property
,以便您可以在任何 MainApp function / callback
中访问它function
/ callback
中定义一个local variable
并将其用作输入参数property
或local
变量传递给第二个应用程序在第二个应用程序中:
private property
来存储输入参数tartupFcn
中将输入parameter
分配给该property
这种方法的优点(但同时也有缺点)是:
其他分享方式也可以。
在以下代码中提出的解决方案中,我使用了(为简单起见)第一种方法。
MainApp
显示 6 个Images
和Import pushbutton
,按下该按钮会打开second App
并显示在 MainApp 中选择的图像:
second App
只是显示在 MainApp 中选择的图像, Close pushbutton
允许关闭它。
MainApp 包括:(见下图):
app2 包括(见下图):
主应用程序代码
为简单起见,MainApp 中图像的路径和文件名是硬编码的,但您可以轻松实现 function 来动态加载它们。
在public properties
集中,您可以找到以下内容:
PathSelectedImage
:用于存储要传递给第二个 App 的所选图像的路径和文件名的属性ImgSelectionStr
:存储图像标签句柄的数组ImageSet
:一个数组,用于存储图像 object 的句柄这两个 arrays 允许在处理图像和字符串时使用 for 循环并避免代码重复。
arrays 在 startupFcn function 中初始化。
要访问存储在 arrays 中的对象的属性,您必须使用set / get函数而不是点表示法。
ImageClickedFcn callback
是为每个图像定义的; 它只是简单地设置图像的 ID 并调用SetUnset_Selection
function。
SetUnset_Selection function
管理图像的选择,它们上方的 label 并启用/禁用Import pushbutton
classdef MainApp_exported < matlab.apps.AppBase
% Properties that correspond to app components
properties (Access = public)
MainAppUIFigure matlab.ui.Figure
img_1_selected matlab.ui.control.Label
img_2_selected matlab.ui.control.Label
img_3_selected matlab.ui.control.Label
img_4_selected matlab.ui.control.Label
img_5_selected matlab.ui.control.Label
img_6_selected matlab.ui.control.Label
ImportButton matlab.ui.control.Button
Image_6 matlab.ui.control.Image
Image_5 matlab.ui.control.Image
Image_4 matlab.ui.control.Image
Image_3 matlab.ui.control.Image
Image_2 matlab.ui.control.Image
Image_1 matlab.ui.control.Image
end
properties (Access = public)
PathSelectedImage; % Path and filename of the selected image
SelectedImageId; % Id of the selected image
SelectedImagePrevId; % Id of the previously selected image
ImgSelectionStr; % Array of Label objects
ImageSet; % Array of Image objects
app2_h; % handle to access app2
end
methods (Access = private)
% SetUnset_Selection: functin that manages the activaton of:
% - selection labels over the images
% - path and filename of the selected image
function SetUnset_Selection(app,SelectedImg)
% Selet the image object from the ImageSet array
tmp = app.ImageSet(SelectedImg);
% Get the path and filename of the selected imae
app.PathSelectedImage = get(tmp,'ImageSource');
% Save the ID of the previouusly selected image
if(app.SelectedImagePrevId ~= app.SelectedImageId)
app.SelectedImagePrevId = app.SelectedImageId;
else
app.SelectedImagePrevId = -1;
end
% Set the ID of the selected image
app.SelectedImageId = SelectedImg;
% Selet the image label object from the ImgSelectionStr array
tmp = app.ImgSelectionStr(SelectedImg);
% Visualize the label of the selected image and hide the label of
% the previously selected image and turns on the Import pushbutton
if(strcmp(get(tmp,'Visible'),"off"))
set(tmp,'Visible',"on",'Text','Selected (click again to unselect)');
app.ImportButton.Enable = "on";
else
set(tmp,'Visible',"off")
app.ImportButton.Enable = "off";
end
if(app.SelectedImagePrevId > 0)
set(app.ImgSelectionStr(app.SelectedImagePrevId),'Visible','off');
end
end
end
% Callbacks that handle component events
methods (Access = private)
% Code that executes after component creation
function startupFcn(app)
% Initialize the handle to access app2
app.app2_h = [];
% Initialize the ID of the previously selected image
app.SelectedImagePrevId = -1;
% Initialize the ID of the selected image
app.SelectedImageId = -1;
% Store the image label objects in the ImgSelectionStr array
% The array is used to easily access the label objects and avoid
% duplication in the code
app.ImgSelectionStr(1) = app.img_1_selected;
app.ImgSelectionStr(2) = app.img_2_selected;
app.ImgSelectionStr(3) = app.img_3_selected;
app.ImgSelectionStr(4) = app.img_4_selected;
app.ImgSelectionStr(5) = app.img_5_selected;
app.ImgSelectionStr(6) = app.img_6_selected;
% Store the image objects in the ImageSet array
% The array is used to easily access the label objects and avoid
% duplication in the code
app.ImageSet(1) = app.Image_1;
app.ImageSet(2) = app.Image_2;
app.ImageSet(3) = app.Image_3;
app.ImageSet(4) = app.Image_4;
app.ImageSet(5) = app.Image_5;
app.ImageSet(6) = app.Image_6;
end
% Button pushed function: ImportButton
function ImportButtonPushed(app, event)
% Turn off the Import pushbutton (will be turned on in the
% SetUnset_Selection function
app.ImportButton.Enable = "off";
% Open the app2 that shows the selected image
app.app2_h=app2(app);
end
% Image clicked function: Image_1
function Image_1Clicked(app, event)
% Set the ID of the selected image
Sel_Img_Id = 1;
% Call SetUnset_Selection to manage the image labels and get the
% path and filename of the selected image
SetUnset_Selection(app,Sel_Img_Id);
end
% Image clicked function: Image_2
function Image_2Clicked(app, event)
% Set the ID of the selected image
Sel_Img_Id = 2;
% Call SetUnset_Selection to manage the image labels and get the
% path and filename of the selected image
SetUnset_Selection(app,Sel_Img_Id);
end
% Image clicked function: Image_3
function Image_3Clicked(app, event)
% Set the ID of the selected image
Sel_Img_Id = 3;
% Call SetUnset_Selection to manage the image labels and get the
% path and filename of the selected image
SetUnset_Selection(app,Sel_Img_Id);
end
% Image clicked function: Image_4
function Image_4Clicked(app, event)
% Set the ID of the selected image
Sel_Img_Id = 4;
% Call SetUnset_Selection to manage the image labels and get the
% path and filename of the selected image
SetUnset_Selection(app,Sel_Img_Id);
end
% Image clicked function: Image_5
function Image_5Clicked(app, event)
% Set the ID of the selected image
Sel_Img_Id = 5;
% Call SetUnset_Selection to manage the image labels and get the
% path and filename of the selected image
SetUnset_Selection(app,Sel_Img_Id);
end
% Image clicked function: Image_6
function Image_6Clicked(app, event)
% Set the ID of the selected image
Sel_Img_Id = 6;
% Call SetUnset_Selection to manage the image labels and get the
% path and filename of the selected image
SetUnset_Selection(app,Sel_Img_Id);
end
end
% Component initialization
methods (Access = private)
% Create UIFigure and components
function createComponents(app)
% Get the file path for locating images
pathToMLAPP = fileparts(mfilename('fullpath'));
% Create MainAppUIFigure and hide until all components are created
app.MainAppUIFigure = uifigure('Visible', 'off');
app.MainAppUIFigure.IntegerHandle = 'on';
app.MainAppUIFigure.Position = [100 100 580 431];
app.MainAppUIFigure.Name = 'MainApp';
app.MainAppUIFigure.Tag = 'App1_FIGURE';
% Create Image_1
app.Image_1 = uiimage(app.MainAppUIFigure);
app.Image_1.ImageClickedFcn = createCallbackFcn(app, @Image_1Clicked, true);
app.Image_1.Position = [34 301 118 92];
app.Image_1.ImageSource = fullfile(pathToMLAPP, 'IMG', 'img_1.jpg');
% Create Image_2
app.Image_2 = uiimage(app.MainAppUIFigure);
app.Image_2.ImageClickedFcn = createCallbackFcn(app, @Image_2Clicked, true);
app.Image_2.Position = [34 176 118 92];
app.Image_2.ImageSource = fullfile(pathToMLAPP, 'IMG', 'img_2.jpg');
% Create Image_3
app.Image_3 = uiimage(app.MainAppUIFigure);
app.Image_3.ImageClickedFcn = createCallbackFcn(app, @Image_3Clicked, true);
app.Image_3.Position = [34 53 118 92];
app.Image_3.ImageSource = fullfile(pathToMLAPP, 'IMG', 'img_3.jpg');
% Create Image_4
app.Image_4 = uiimage(app.MainAppUIFigure);
app.Image_4.ImageClickedFcn = createCallbackFcn(app, @Image_4Clicked, true);
app.Image_4.Position = [413 301 118 92];
app.Image_4.ImageSource = fullfile(pathToMLAPP, 'IMG', 'img_4.jpg');
% Create Image_5
app.Image_5 = uiimage(app.MainAppUIFigure);
app.Image_5.ImageClickedFcn = createCallbackFcn(app, @Image_5Clicked, true);
app.Image_5.Position = [413 176 118 92];
app.Image_5.ImageSource = fullfile(pathToMLAPP, 'IMG', 'img_5.jpg');
% Create Image_6
app.Image_6 = uiimage(app.MainAppUIFigure);
app.Image_6.ImageClickedFcn = createCallbackFcn(app, @Image_6Clicked, true);
app.Image_6.Position = [413 53 118 92];
app.Image_6.ImageSource = fullfile(pathToMLAPP, 'IMG', 'img_6.jpg');
% Create ImportButton
app.ImportButton = uibutton(app.MainAppUIFigure, 'push');
app.ImportButton.ButtonPushedFcn = createCallbackFcn(app, @ImportButtonPushed, true);
app.ImportButton.BackgroundColor = [0.9294 0.6941 0.1255];
app.ImportButton.FontSize = 14;
app.ImportButton.FontWeight = 'bold';
app.ImportButton.Enable = 'off';
app.ImportButton.Position = [211 203 158 39];
app.ImportButton.Text = 'Import';
% Create img_6_selected
app.img_6_selected = uilabel(app.MainAppUIFigure);
app.img_6_selected.FontWeight = 'bold';
app.img_6_selected.FontColor = [1 0 0];
app.img_6_selected.Visible = 'off';
app.img_6_selected.Position = [350 144 195 22];
app.img_6_selected.Text = 'Selected (click again to unselect)';
% Create img_5_selected
app.img_5_selected = uilabel(app.MainAppUIFigure);
app.img_5_selected.FontWeight = 'bold';
app.img_5_selected.FontColor = [1 0 0];
app.img_5_selected.Visible = 'off';
app.img_5_selected.Position = [350 267 195 22];
app.img_5_selected.Text = 'Selected (click again to unselect)';
% Create img_4_selected
app.img_4_selected = uilabel(app.MainAppUIFigure);
app.img_4_selected.FontWeight = 'bold';
app.img_4_selected.FontColor = [1 0 0];
app.img_4_selected.Visible = 'off';
app.img_4_selected.Position = [350 393 195 22];
app.img_4_selected.Text = 'Selected (click again to unselect)';
% Create img_3_selected
app.img_3_selected = uilabel(app.MainAppUIFigure);
app.img_3_selected.FontWeight = 'bold';
app.img_3_selected.FontColor = [1 0 0];
app.img_3_selected.Visible = 'off';
app.img_3_selected.Position = [48 144 195 22];
app.img_3_selected.Text = 'Selected (click again to unselect)';
% Create img_2_selected
app.img_2_selected = uilabel(app.MainAppUIFigure);
app.img_2_selected.FontWeight = 'bold';
app.img_2_selected.FontColor = [1 0 0];
app.img_2_selected.Visible = 'off';
app.img_2_selected.Position = [48 267 195 22];
app.img_2_selected.Text = 'Selected (click again to unselect)';
% Create img_1_selected
app.img_1_selected = uilabel(app.MainAppUIFigure);
app.img_1_selected.FontWeight = 'bold';
app.img_1_selected.FontColor = [1 0 0];
app.img_1_selected.Visible = 'off';
app.img_1_selected.Position = [48 393 195 22];
app.img_1_selected.Text = 'Selected (click again to unselect)';
% Show the figure after all components are created
app.MainAppUIFigure.Visible = 'on';
end
end
% App creation and deletion
methods (Access = public)
% Construct app
function app = MainApp_exported
% Create UIFigure and components
createComponents(app)
% Register the app with App Designer
registerApp(app, app.MainAppUIFigure)
% Execute the startup function
runStartupFcn(app, @startupFcn)
if nargout == 0
clear app
end
end
% Code that executes before app deletion
function delete(app)
% Delete UIFigure when app is deleted
delete(app.MainAppUIFigure)
end
end
end
第二个应用程序代码
private property MainApp
用于存放MainApp的入参(即MainApp句柄)
startupFcn
只是从输入参数中检索要显示的图像的路径和名称,并在图像上方设置 label。
classdef app2_exported < matlab.apps.AppBase
% Properties that correspond to app components
properties (Access = public)
App2ImageDisplayUIFigure matlab.ui.Figure
Label matlab.ui.control.Label
CloseButton matlab.ui.control.Button
Image matlab.ui.control.Image
end
properties (Access = private)
MainApp; % Handle of the calling app (app1)
end
% Callbacks that handle component events
methods (Access = private)
% Code that executes after component creation
function startupFcn(app, CallingApp)
% Set the handle of the calling app
app.MainApp = CallingApp;
% Load the select image
app.Image.ImageSource = CallingApp.PathSelectedImage;
% Print the name and the ID of the diplayed image
[~,name,~] = fileparts(app.Image.ImageSource);
img_id=CallingApp.SelectedImageId;
str=sprintf('Name: %s\nPosition: %d',name,img_id);
app.Label.Text = str;
% Set the Label of the selected image in app1 as "Imported"
tmp=CallingApp.ImgSelectionStr(img_id);
set(tmp,'text','Imported');
end
% Button pushed function: CloseButton
function CloseButtonPushed(app, event)
% Get the handle of the label of the selected image in app1
tmp=app.MainApp.ImgSelectionStr(app.MainApp.SelectedImageId);
% Update the label of displayed image in the calling app before
% closing the app2
set(tmp,'text','App2 closed, select a in image');
app.MainApp.app2_h = [];
delete(app);
end
% Close request function: App2ImageDisplayUIFigure
function App2ImageDisplayUIFigureCloseRequest(app, event)
tmp=app.MainApp.ImgSelectionStr(app.MainApp.SelectedImageId);
% Update the label of displayed image in the calling app before
% closing the app2
set(tmp,'text','App2 closed, select a in image');
app.MainApp.app2_h = [];
delete(app);
end
end
% Component initialization
methods (Access = private)
% Create UIFigure and components
function createComponents(app)
% Create App2ImageDisplayUIFigure and hide until all components are created
app.App2ImageDisplayUIFigure = uifigure('Visible', 'off');
app.App2ImageDisplayUIFigure.IntegerHandle = 'on';
app.App2ImageDisplayUIFigure.Position = [100 100 655 536];
app.App2ImageDisplayUIFigure.Name = 'App2 - Image Display';
app.App2ImageDisplayUIFigure.CloseRequestFcn = createCallbackFcn(app, @App2ImageDisplayUIFigureCloseRequest, true);
app.App2ImageDisplayUIFigure.HandleVisibility = 'on';
app.App2ImageDisplayUIFigure.Tag = 'app2_FIGURE';
% Create Image
app.Image = uiimage(app.App2ImageDisplayUIFigure);
app.Image.Position = [33 122 390 295];
% Create CloseButton
app.CloseButton = uibutton(app.App2ImageDisplayUIFigure, 'push');
app.CloseButton.ButtonPushedFcn = createCallbackFcn(app, @CloseButtonPushed, true);
app.CloseButton.Position = [445 273 98 34];
app.CloseButton.Text = 'Close';
% Create Label
app.Label = uilabel(app.App2ImageDisplayUIFigure);
app.Label.WordWrap = 'on';
app.Label.Position = [59 448 524 73];
app.Label.Text = '';
% Show the figure after all components are created
app.App2ImageDisplayUIFigure.Visible = 'on';
end
end
% App creation and deletion
methods (Access = public)
% Construct app
function app = app2_exported(varargin)
% Create UIFigure and components
createComponents(app)
% Register the app with App Designer
registerApp(app, app.App2ImageDisplayUIFigure)
% Execute the startup function
runStartupFcn(app, @(app)startupFcn(app, varargin{:}))
if nargout == 0
clear app
end
end
% Code that executes before app deletion
function delete(app)
% Delete UIFigure when app is deleted
delete(app.App2ImageDisplayUIFigure)
end
end
end
下图显示了两个“正在工作”的应用程序。
希望这可以帮助。 卡普拉
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.