MATLAB GUI界面小总结

MATLAB GUI界面小总结

  • 新建和运行
  • 添加背景图片
  • 点击按钮后运行其他程序
  • 在坐标区中绘图
  • 自动在表格中写入数字
  • 弹出式菜单使用方法
  • 可编辑文本的数据传递
  • msgbox
  • 修改GUI名字时的一些问题

这几天做了一点关于matlab GUI界面的一些小小工作,这里主要记录一下小白的学习过程

新建和运行

  1. 在命令行窗口输入guide来建立一个空白GUI界面,从而会生成一个.fig文件和.m文件
  2. 运行已建立的GUI界面有两种方式,直接运行相应的.m文件或右键.fig选择在GUIDE中打开

添加背景图片

  1. 将自己要添加的背景图片放在相应的文件夹下,如图片1.png

  2. 右键.fig选择在GUIDE中打开出现编辑界面,双击空白部分进入背景检查器界面,进入CreateFcn(点击前面的小刷子),在相应部分写入下面代码就好啦。

     function figure1_CreateFcn(hObject, eventdata, handles)
     % hObject    handle to figure1 (see GCBO)
     % eventdata  reserved - to be defined in a future version of MATLAB
     % handles    empty - handles not created until after all CreateFcns called
     
     ha=axes('units','normalized','pos',[0 0 1.0 0.6]);
     uistack(ha,'down');
     ii=imread('1.png');
     image(ii);
     colormap gray
     set(ha,'handlevisibility','off','visible','on');
    

ii=imread(‘1.png’)为图片名字,ha=axes(‘units’,‘normalized’,‘pos’,[0 0 1.0 0.6]);pos属性输入想要的图片位置及大小(0~1)

点击按钮后运行其他程序

  1. 双击按钮,进入Callback函数
  2. run name

name为你要运行的.m文件名字,可以是一个.m程序(那么点击按钮后就会自动运行该.m程序),也可以是GUI的.m文件(那么点击按钮后就会弹出这个新的GUI界面)
若要运行的.m程序不在当前目录下,需要添加目录

	addpath xxx

若在当前文件夹的子文件夹1里面,可以直接写成

	addpath .\1

在坐标区中绘图

建议使用axes(handles.axes1);的方法,直接在plot函数前面加上handles.axes1(即plot(handles.axes1,x,y……))当一个gui界面存在好几个坐标区时,且一个坐标区有很多个plot时容易出错,且该方法更简单:
假设是要点击按钮后,就在坐标区显示图片

  1. 首先双击坐标区,在坐标区检查器中查看该坐标区的Tag(一般为axes1,然后依次排序),这里假设为axes1

  2. 双击按钮,进入按钮的Callback函数,写入axes(handles.axes1);之后正常写绘图函数。若要在第二个坐标区(axes2)显示,就在第二个绘图函数前写axes(handles.axes2),如

     axes(handles.axes1);
     plot(x1,y1);
     axes(handles.axes2);
     plot(x2,y2);
    

此时GUI界面就会在两个坐标区分别显示这两条线

自动在表格中写入数字

  1. 添加一个表格后,首先双击表格查看表格的Tag,一般为uitable1

  2. 在.m文件的OpeningFcn函数(打开GUI就会执行该函数下面的内容)下面写入表格内容矩阵a,如下所示(我建的是一个6*6的表格)

     a =       [7,300,30,-20,100,2800;
                     0,290,31,-10,100,2800;
                     0,307,29,5,100,2800;
                     5,302,30.5,10,100,2800; 
                     12,291,30,10,100,2800;
                     30,288,30,25,100,2800;
              ];
     set(handles.uitable1,'Data',a);
     guidata(hObject,handles);
    

弹出式菜单使用方法

  1. 双击弹出式菜单,在String中输入菜单内容,如
    6
    5
    4
    那么弹出式菜单就会有6 5 4这几个选项,顺便查看弹出式菜单的Tag,一般为(popupmenu1)

  2. 进入弹出式菜单的Callback函数部分。每次选择弹出式菜单内容就会运行该函数下面的内容,在该函数下面写入:

     value1 = get(hObject,'Value');
     all_ports={'6','5','4'};
     com=all_ports(value1);
    

其中com就为你选择的内容(6、5、4)

若想要把弹出式菜单中的数字作为一个程序的输入,还是以6、5、4举例:

  1. 首先要在.m文件的OpeningFcn函数加入一个handles.value变量,可以设一个默认值,即:handles.value = 6;然后更新guidata(hObject,handles);

  2. 在弹出式按钮Callback函数中写入下面代码

     value1 = get(hObject,'Value');
     all_ports={'6','5','4'};
     com=all_ports(value1);
     x = str2double(com);
     handles =guidata(hObject);
     handles.value = x;
     guidata(hObject,handles);
    

与刚才不同的是首先将弹出式按钮的内容数据形式进行了转换str-to-double,然后将其内容赋值给了handle.value
3. 设置全局变量,如

global data 
data = handles.value;
run name.m

同样在name.m程序中加入全局变量global data ,就实现了弹出式按钮到.m文件的数据传递

可编辑文本的数据传递

get(handles.edit1,‘String’)为获取可编辑文本edit1的内容,为String格式
set(handles.edit9,‘String’,‘哈哈’)为设置可编辑文本edit9的内容,将其设置为’haha’
同样若要传给.m文件,直接设置global全局变量就好了

msgbox

msgbox内容:

	aa = ['剩余最大航程   ';'导弹杀伤目标的概率';'导弹速度     ';'导弹价值     ';'目标种类     ';'目标价值     ';'目标威胁等级   '];

矩阵为char类型,需要字符个数一样(可用空格代替),否则会报错。

h=msgbox(aa);
set(h,'Position',[500 500 150 150]);% 使用这个语句可以修改msgbox的位置和大小

修改字体大小:

	ah = get(h, 'CurrentAxes');
	ch = get(ah, 'Children');
	set(ch, 'FontSize',12);

弹出msgbox可手动调整大小;

	set(h, 'Resize', 'on'); 

修改GUI名字时的一些问题

修改了GUI名字后,很容易出现一些问题,要对下面的内容逐一修改:

  1. 直接右键重命名修改.m和.fig的名字;
  2. 进入.fig 编辑界面,双击空白处,修改检查器中的Name,若添加过背景图片,那么在CreateFcn一栏是有内容的,需要点击小刷子,会弹出一个界面,确定保存。检查其余有小刷子一栏的后面有没有内容,若有,都需要点击小刷子然后确定。
  3. 双击其余按钮、可编辑文本,检查检查器中有小刷子一栏的后面有没有内容,若有,都需要点击小刷子然后确定。(这应该是为了将.m中程序中对应有名字的地方给自动修改过去)

你可能感兴趣的:(MATLAB)