问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在matlab中建立一个简单的图形用户界面

发布网友 发布时间:2022-04-23 20:55

我来回答

1个回答

热心网友 时间:2023-10-09 11:57

创建一个完整的Matlab/GUI步骤:
在MATLAB的命令窗口(Command Window)中运行guide命令,来打开GUIDE界面,如下:
然后,选择空模板(Blang GUI),点击OK,即可打开GUIDE的设计界面,如下:

点击工具栏上的菜单编辑器(Menu Editor),打开菜单编辑器,如下:

在Menu Bar中新建一个菜单项,名字为“文件”,其他设置请看下图:

在“文件”菜单下添加菜单项:“打开”,“保存”,“退出”。见下图:

如果需要在菜单项“退出”上面添加一个分割线的话,选中“Separator above this
item”就行了。
保存我的界面为pjimage.fig. 保存完毕之后,会自动打开pjimage.m文件,而我们所有
的程序都是要写在这个M 文件里面的。在编程中,我们的每一个鼠标动作都对应一个
Callback函数。那么我们的菜单项也是如此的。
在界面上,单击鼠标右键选择“Property Inspector”,即可打开属性窗口。当我们点击不
同的控件时,其对应的属性都会在这里显示,我们可以进行修改。最主要的属性莫过于Tag
属性和String属性。
设置当前Figure窗口的Tag属性为:figure_pjimage,窗口的标题(Name属性)为:图像处
理实例。如下:

然后,点击工具栏的保存按钮。之后,点击工具栏的运行按钮(Run Figure)。注意,工具栏
的图标都会有提示的,像运行按钮的提示就是Run Figure. 我们会看到如下的界面:

那说明,我们保存的.fig 文件的目录不是当前目录,但是没关系啊,我们只要点击
“Change Directory”来改变当前目录。当然,如果你想把当前目录添加到MATLAB路径也
可以,那就点击“Add to Path”就OK了。我在这里推荐点击“Change Directory”,因为
没有什么太大必要把其添加到MATLAB路径中,一般是工具箱需要添加或者我们的函数或程序写完了,而在MATLAB的命令
窗口找不到我们的函数的时候,我们可以将函数或程序所在的目录添加到MATLAB路径。
总之吧,点那个按钮,要看个人的爱好了。不管点击两个按钮的那一个按钮,都会正确的运行程序的。
我们的程序运行时的样子,是这样的:

文件下面的菜单项和快捷键我们都能看到,但是我们没有写程序,所以就算点也没有什么
响应。还有如果不想设置快捷键,可以在Menu Editor中设置,只要把其选择为Ctrl+none
就行了,如下:

这样的话,保存项就没有了快捷键了。我们可以通过上面的按钮“View”来查看该菜单项的
响应函数,也就是Callback 函数。也可以在pjimage.m 中看,比如保存的Tag 属性是
m_file_save,那么它对应的Callback函数的名字就是m_file_save_Callback。依次类推了。
下面我们来写打开菜单项的函数,要打开一个图片,当然要用打开对话框了。在界面编程中,
打开对话框的函数是uigetfile. 关于它的详细的说明用help uigetfile命令查看。下面
是打开菜单的响应函数:
[plain] view plain copy print?function m_file_open_Callback(hObject, eventdata, handles) [filename, pathname] = uigetfile( ... {'*.bmp;*.jpg;*.png;*.jpeg', 'Image Files (*.bmp, *.jpg, *.png, *.jpeg)'; ... '*.*', 'All Files (*.*)'}, ... 'Pick an image'); 保存.m文件,并运行程序。点击“文件”下的“打开”,会打开如下的打开对话框:

选择一个文件之后,程序中的filename就是你选择的文件的文件名,pathname就是该文
件所在的目录的路径。比如: filename =5.jpg , pathname =C:\Documents and
Settings\Administrator\My Documents\。
那么获得路径之后,我们要怎么样才能读入和显示一个图片呢?读入图片可以用imread函
数,而显示可以在一个坐标轴上。那么我们需要在界面上画上一个坐标轴,为了对比,我们
画两个坐标轴,一个显示处理前,一个显示处理后的。并且将处理前的坐标轴的Tag属性改
为axes_src,处理后的坐标轴的Tag属性为axes_dst。更改之后,保存。如下:

然后在m_file_open_Callback程序原来的基础上,再添加如下的程序:
[plain] view plain copy print?axes(handles.axes_src);%用axes命令设定当前操作的坐标轴是axes_src fpath=[pathname filename];%将文件名和目录名组合成一个完整的路径 imshow(imread(fpath));%用imread读入图片,并用imshow在axes_src上显示 运行程序,通过“打开”菜单项,打开一个图片。效果如下:

那么如何来保存一副图片?用imwrite命令。但imwrite命令的第一个参数就是你读入的图片数据,也就是imread的返回值。这样的话,我们就要
将m_file_open_Callback中的程序做一点小小的改动。将最后一句(imshow(imread(fpath))),更改为两句,如下:
[plain] view plain copy print?img_src=imread(fpath);imshow(img_src); 不仅如此,我们的保存菜单的Callback函数,如何去获得打开菜单的Callback函数下的img_src变量呢?这里就要将img_src来作为一个共享的数据。
许多界面编程的朋友,喜欢用global声明。我个人不喜欢这样用,因为有更好的方法。那就是用setappdata和getappdata两个函数。我们可以为界
面上面的任何一个具有Tag属性的控件添加应用程序数据。当然我比较喜欢将这些共享的应用程序数据统一添加到Figure窗口上,因为这样容易记,
如果一个控件一个,感觉不容易记。
你在.m文件中会发现除了各个菜单项的Callback函数以外,还有两个函数:
pjimage_OpeningFcn和pjimage_OutputFcn.而pjimage_OpeningFcn就相当于界面的初始化函数,而pjimage_OutputFcn则是界面的输出函数,
也就是当你不运行fig,而调用.m文件时的返回值。
所以,我们要在pjimage_OpeningFcn中添加如下的程序,来共享这个img_src矩阵。代码如下:
[plain] view plain copy print?
setappdata(handles.figure_pjimage,’img_src’,0);
然后,在m_file_open_Callback函数的最后写上如下程序:

[plain] view plain copy print?
setappdata(handles.figure_pjimage,’img_src’,img_src);
那么,我们在m_file_save_Callback函数中就可以像这样的来提取img_src,如下:

[plain] view plain copy print?
img_src=getappdata(handles.figure_pjimage,’img_src’);
保存的时候,自然会用到保存对话框了。要用保存对话框,就要用到uiputfile函数了,具体的请用help uiputfile查看。
那么,保存菜单项下的程序(m_file_save_Callback),可以这样写:

[plain] view plain copy print?
[filename, pathname] = uiputfile({'*.bmp','BMP files';'*.jpg;','JPG
files'}, 'Pick an Image');
if isequal(filename,0) || isequal(pathname,0)
return;%如果点了“取消”
else
fpath=fullfile(pathname, filename);%获得全路径的另一种方法
end
img_src=getappdata(handles.figure_pjimage,'img_src');%取得打开图
片的数据
imwrite(img_src,fpath);%保存图片
下面是退出菜单项的程序的。要退出界面,只要用close函数就行了,但是通常都会有提示
的。比如你如果进行了处理图片,而又没有保存处理后的图片,那么在关闭的时候就应该给
出提示,询问是否进行保存。不过,在这里,我们先不做这个工作,等后面有需要的时候再
写吧。因此,这里的退出菜单项的程序就是一句,如下:

[plain] view plain copy print?
close(handles.figure_pjimage);
其实,用delete函数也是可以的,就是:delete(handles.figure_pjimage);看你的心情了。
但是运行程序的时候,你会发现,当你打开图片的时候,如果点“取消”按钮,那么在MATLAB的命令窗口会弹出错误,那是因为我们没有处理取消的情况。下面我们来处理下这个问题,只要把m_file_open_Callback下面的程序更改为如下程序即可:
[plain] view plain copy print?
[filename, pathname] = uigetfile( ...
{'*.bmp;*.jpg;*.png;*.jpeg', 'Image Files (*.bmp, *.jpg, *.png,
*.jpeg)'; ...
'*.*', 'All Files (*.*)'}, ...
'Pick an image');
if isequal(filename,0) || isequal(pathname,0),
return;
end
axes(handles.axes_src);
fpath=[pathname filename];
img_src=imread(fpath);
imshow(img_src);
setappdata(handles.figure_pjimage,'img_src',img_src);

附录---pjimage.m最终源代码:
[plain] view plain copy print?
function varargout = pjimage(varargin)
% PJIMAGE MATLAB code for pjimage.fig
% PJIMAGE, by itself, creates a new PJIMAGE or raises the existing
% singleton*.
%
% H = PJIMAGE returns the handle to a new PJIMAGE or the handle to
% the existing singleton*.
%
% PJIMAGE('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in PJIMAGE.M with the given input arguments.
%
% PJIMAGE('Property','Value',...) creates a new PJIMAGE or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before pjimage_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to pjimage_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help pjimage

% Last Modified by GUIDE v2.5 21-May-2016 13:35:10

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @pjimage_OpeningFcn, ...
'gui_OutputFcn', @pjimage_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% --- Executes just before pjimage is made visible.
function pjimage_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to pjimage (see VARARGIN)

% Choose default command line output for pjimage
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes pjimage wait for user response (see UIRESUME)
% uiwait(handles.figure_pjimage);

setappdata(handles.figure_pjimage,'img_src',0);

% --- Outputs from this function are returned to the command line.
function varargout = pjimage_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

% --------------------------------------------------------------------
function m_file_Callback(hObject, eventdata, handles)
% hObject handle to m_file (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% --------------------------------------------------------------------
function m_file_open_Callback(hObject, eventdata, handles)
% hObject handle to m_file_open (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

[filename, pathname] = uigetfile( ...
{'*.bmp;*.jpg;*.png;*.jpeg','Image Files (*.bmp, *.jpg, *.png,*.jpeg)'; ...
'*.*', 'All Files (*.*)'}, ...
'Pick an image');

if isequal(filename,0) || isequal(pathname,0),
return;
end

axes(handles.axes_src);%用axes命令设定当前操作的坐标轴是axes_src
fpath=[pathname filename];%将文件名和目录名组合成一个完整的路径
%imshow(imread(fpath));%用imread读入图片,并用imshow在axes_src上显示
img_src=imread(fpath);imshow(img_src);

setappdata(handles.figure_pjimage,'img_src',img_src);

% --------------------------------------------------------------------
function m_file_save_Callback(hObject, eventdata, handles)
% hObject handle to m_file_save (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
如何用MATLAB GUI制作简单的软件

首先打开MATLAB,并注意一定要更改工作目录,并且建议工作目录中不得含中文。2 在命令行窗口中输入:“guide”,打开GUIDE的创建窗口,选择"blank GUI"并点击确定。3 这就是创建了一个软件界面了,这时点击上方绿色箭头就可以运行这个软件了,只不过界面上面还什么都没有。4 点击左侧的工具栏中,如图所示...

怎么用matlab绘制一个简单的图模型

f(x)。步长h可以任意选取,一般,步长越小,曲线越光滑,但是步长太小,会增加计算量,运算速度要降低。通常步长h取为0.1可以达到较好的绘图效果。如果想在图形中标出网格线,用命令:plot(x,y),grid on即可。例22:画出函数y = sin x2 在-5 £ x £ 5 的图形。解: Matlab 命令:...

如何用MATLAB创建一个简单的电路板?

1、首先我们选择鼠标单击打开MATLAB工作界面。2、选择下面显示的Simulink按钮以打开Simulink工作环境。3、Simulink设备库可以包含图中数字2的列表。在设备库中,库中包含子设备,请参见图中的标签3。4、要创建一个新的Simulink仿真要价,请单击图中的标签1以创建一个空白的Simulink仿真文件。5、新的Simulink...

matlab如何在一个图形窗口中持续显示计算结果

1、首先点击进入matlab。2、其次创建一个图形窗口,选择调节规格。3、最后点击保存时选择应用到持续显示计算结果中即可。

MATLAB 对于一个已完成的M文件(有输入和输出),如何创建一个GUI界面...

如果是脚本文件的话,要想办法改成函数文件 并使其能够接受两个输入参数 根据两个输入参数计算出24个输出参数 而24个输出参数的形式是固定的8x3,所以完全可以输出一个矩阵 那么你用于计算的函数大概拥有下面的形式 输出矩阵= 函数名(输入参数1,输入参数2)省下的你只需在gui的回调函数里,调用编写好...

matlab中如何绘制一个图形,并改变其名称?

有以下方法:1.我们需要对matlab有一个初步的了解后,才可能完成后续的步骤,例子如下:2.现在我们需要把图形隐藏起来,也就是不主动弹出图形窗口,这一步需要我们了解相关的函数句柄的知识,具体看图:3.在上一步中,函数图形的可见性(visible)已经关闭(off),也就是被隐藏起来了,接着我们得把plot...

如何使用matlab在网页中作图

1 Matlab函数编写 首先确定返回WebFigure的Matlab函数的基本形式如下:function [result1 result2] = getfigure(parameter1, parameter2) f = figure('Visible','off'); %建立一个Figure. 生成函数图形的代码,插入到f中去; result1 = webfigure(f); %将Figure转换为WebFigure并返回 close(f); %...

matlab 如何在作图的时候图形是嵌入在操作界面上的?

创建窗口时使用:figure('windowstyle', 'docked');或者对当前窗口操作:set(gcf, 'windowstyle', 'docked');

matlab怎么在一个图形窗口中画多个图形

在Matlab中,如果你想在一个图形窗口中同时绘制多个图形,你可以按照以下步骤操作:首先,你需要定义你的函数。例如,你可以定义z1为x和y的正弦积,z2为x的线性函数加上三次幂减去y的平方加一,以及z3为坐标系中点的余弦值除以点的欧几里得距离。例如:z1=sin(x).*sin(y);z2=x+x.^3-y.^2+...

Matlab图形用户界面,如何点击弹出框中的文本,在后面的可编辑文本中输入...

在popupmenu1_Callback里,用于显示选项内容,及获得选项号:global data;global sel;sel=get(hObject,'Value');set(handles.edit1,'string',data(sel-1).jg);%因为下拉菜单第一项为“商品说明”,所以选项加1 set(handles.edit2,'string',data(sel-1).zk);在edit1_Callback里:global data;...

matlab如何建立m文件 matlab中图形保持 matlab三维图形的绘制 matlab如何画图 matlab浪漫图形 matlab界面 matlab建立函数 matlab怎么建立函数文件 matlab subplot函数
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
投放虚假危险物质罪定义有哪些 眼睛总是流泪,还有种像有东西在眼里磨的感觉,看东西看时间长了,发涩... 老人眼睛看不清楚要吃什么东西较好 ...刀、球刀都有什么类型和各的用途? 请师父们详细说下... ...还需要什么知识 比如镜头之类的请详细介绍下 谢谢 ...详细说下每个类型的长处以及各类型的对比。 塔罗测试软件免费,塔罗app推荐 塔罗牌软件哪个好 煎鱼腥草需要放冰糖吗 我和我们在一起原著小说结局 是根据哪部小说改编的 MATLAB中的simulink是做什么的?说的通俗简单点 matlab如何直接获取剪切板中的图像? matlab打开带手写板的fig文件时,出现下图的错误。 环境win10 X64 matlab R2013b 怎样用matlab画光学掩膜三次相位板三维图(因为写论文所以不能用下面的三维图必须自己弄一个类似的图) 淘宝上如何关闭待付款的东西? matlab编程:图解法计算吸收塔理论塔板数 在matlab中怎样使用pid板块 MATLAB如何访问剪切板中的图像? 谁知道matlab中的SIMULINK里边的这个,光伏电池板的模型在哪找的,叫什么? 邮件能解除战网安全令吗 用MATLAB实现螺旋相位板的相位全息图 如何用MATLAB中surf如何画一块有开孔的板 战网安全令序列号在那 还有账号登陆不进去 游戏都能登陆 matlab gui中的面板有什么用? 网易战网通行证密码和wow密码是同一个吗 求助,为什么登录不了战网 战网客户端无法登陆,战网官网也上不去 战网游戏 守望先锋 异地登陆需要安全码,如何安全吗 战网登陆时总显示这个怎么办? 为什么我的战网号登录需要安全码但我的QQ邮箱接收不了邮件,现在它直接显示密码错误? matlab怎么用来画电路图 Matlab画图 matlab中的floor是什么意思 Matlab怎么实现多标签页的效果。 几何画板和matlab哪个更好 matlab相机标定的时候,拍摄标定板照片时候,标定板所在位置可以变吗? 什么是司法考试?和律师资格考试有什么关系? vivo手机怎么换手机卡? 手机换sim卡需要关机吗? 律师资格证和司法考试区别 手机换卡后无服务怎么解决? 律师资格证和司法考试是一样的吗 法律:司法考试与律师资格考试有何区别? 律师资格考试和司法考试是一回事吗 最近想换手机卡呢,有没有好的建议呢? 律师资格考试和司法考试 司法考试,律师考试,基层法律服务者考试一样吗? 更换手机卡怎么更换? 律师资格考试与司法考试有什么分别 换手机卡为什么用不了?