前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Matlab系列之GUI设计实例2

Matlab系列之GUI设计实例2

作者头像
狂人V
发布2021-07-23 13:32:31
1.3K0
发布2021-07-23 13:32:31
举报
文章被收录于专栏:电子狂人

简介

有了实例1的学习,大家也掌握基本的使用了,本篇再详细介绍一个GUI的设计,再分享一些网上找到的别人设计的GUI小游戏~

有想法的可以自己迸发灵感时玩玩这些设计,需要参考涉及的设计源码就自行在文末获取了~

~Show Time~

功能介绍

先看实例2的运行效果

界面比较简陋,就直接先描述下它的一些功能吧

1、菜单栏中的功能,分别有

File:用于打开fig文件,打印当前Figure,关闭EX2的界面

Plot 2D和3D:分别在图形显示窗口显示对应的2D或3D图形,会对应在图形选择和图形设置部分显示对应的类型。

Help:用于信息显示

2、图形显示部分

用于显示绘制的图形

3、图形选择

可以选择多种图形函数

4、图形设置下包含三个选项

网格开/关:绘出的图形中,是否需要显示网格

线型选择:有正常的line和一个“o”的绘图线型

横轴取值:设置了3个取值范围的选项,即X的范围值,仅使用于2D图形,3D图形下,会关闭该选项和线型选择

5、更新设置

在完成图形选择和图形设置后,点击更新设置,图形显示部分就会更新图形。

设计解析

使用到6组静态文本,即一般用于固定信息的显示,当然,你也可以用滚动框之类的s操作~

1个坐标轴,也就是用于图形显示的部分

图上显示的EX2_Show是它的tag值

1个面板,用于框选图形选择和图形设置部分,相对美观那么一丢丢吧。。。

1个按钮,就是更新设置对应的控件,Tag值为:Update

然后就是该GUI设计最重要的一个控件了,弹出式菜单,也就是运行后,可以用于选择结果的东西,总共用到了4组

既然要弹出来,肯定需要先预先设置好可弹的选项了,直接双击放置好的弹出式菜单,然后找到String,点击边上的那个小图框,会出现String的弹窗,在这里一行代表一个选项,使用句柄返回的Value值,则依次是1~5的值;Tag值也是个方便区分的名。

注意:如果放置了弹出式菜单,但是Style不是popupmenu的话,记得改成这个,不然要出错

然后就是依次对网格、线型和取值范围进行设置

这些设置好了,就是完善一下菜单的显示了,可以根据自己想法做修改

源码解析

做好界面的设计后,就是对这些控件的回调函数进行编程了,直接根据对应控件的源码作下简单讲解

更新设置(Tag:Update)

首先获取4个弹出式菜单选择的内容,然后根据选择的结果,做出对应的结果显示

代码语言:javascript
复制
% --- Executes on button press in Update. 
function Update_Callback(hObject, eventdata, handles) 
% hObject    handle to Update (see GCBO) 
% eventdata  reserved - to be defined in a future version of MATLAB 
% handles    structure with handles and user data (see GUIDATA) 
%% 获取设置信息 
v1 = get(handles.Func_Choose,'Value'); 
v2 = get(handles.Grid,'Value'); 
v3 = get(handles.Line_Shape,'Value'); 
v4 = get(handles.Range,'Value'); 
%% 运行设置选项 
switch v4 
    case 1 
        t=-pi:pi/50:pi; 
    case 2 
        t=-2*pi:pi/50:2*pi; 
    case 3 
        t=0:pi/50:4*pi; 
end 
 
switch v1 
    case 3 
        peaks_Callback(hObject, eventdata, handles);         
    case 4 
        cylinder_Callback(hObject, eventdata, handles); 
    case 5 
        sphere_Callback(hObject, eventdata, handles); 
end 
switch v1 
    case 1 
        Plot_2D_Callback(hObject, eventdata, handles); 
    case 2 
        Plot_2D_Callback(hObject, eventdata, handles); 
    case 3 
        Plot_3D_Callback(hObject, eventdata, handles); 
    case 4 
        Plot_3D_Callback(hObject, eventdata, handles); 
    case 5 
        Plot_3D_Callback(hObject, eventdata, handles); 
end 
switch v3 
    case 1 
        switch v1 
            case 1 
                plot(t,sin(t));title('sin(x)-Line'); 
            case 2 
                plot(t,cos(t));title('cos(x)-Line'); 
        end 
        xlabel('x');ylabel('y'); 
    case 2 
        switch v1 
            case 1 
                plot(t,sin(t),'o');title('sin(x)-Circle'); 
            case 2 
                plot(t,cos(t),'o');title('cos(x)-Circle'); 
        end 
        xlabel('x');ylabel('y'); 
end 
switch v2 
    case 1 
        grid on; 
    case 2  
        grid off; 
end

【菜单】文件项

文件项下还包含open、print和close的3个功能,同时关闭弹出式菜单的功能

代码语言:javascript
复制
function file_Callback(hObject, eventdata, handles) 
% hObject    handle to file (see GCBO) 
% eventdata  reserved - to be defined in a future version of MATLAB 
% handles    structure with handles and user data (see GUIDATA) 
set(handles.Grid,'Enable','off'); 
set(handles.Line_Shape,'Enable','off'); 
set(handles.Range,'Enable','off'); 
set(handles.Update,'Enable','off'); 
 
function OpenMenuItem_Callback(hObject, eventdata, handles) 
file = uigetfile('*.fig'); 
if ~isequal(file,0)%非空 
    open(file); 
end 
 
function PrintMenuItem_Callback(hObject, eventdata, handles) 
printdlg(handles.figure1); 
 
function CloseMenuItem_Callback(hObject, eventdata, handles) 
selection = questdlg(['Close' get(handles.figure1,'Name') '?'],...%提示框信息 
    ['Close' get(handles.figure1,'Name') '...'],...%提示框名称 
    'Yes','No','Yes');%预选Yes 
if strcmp(selection,'No') 
    return; 
end 
delete(handles.figure1);

【菜单 】2D绘制项

由于Update中已经有了sin和cos图形的绘制,就将图形选择为对应的函数,然后再直接进行了调用Update的回调函数,相当于点了一下“更新设置”的按钮,同时会使能所有弹出式菜单的功能

代码语言:javascript
复制
function Plot_2D_Callback(hObject, eventdata, handles) 
% hObject    handle to Plot_2D (see GCBO) 
% eventdata  reserved - to be defined in a future version of MATLAB 
% handles    structure with handles and user data (see GUIDATA) 
set(handles.Func_Choose,'Enable','on'); 
set(handles.Grid,'Enable','on'); 
set(handles.Line_Shape,'Enable','on'); 
set(handles.Range,'Enable','on'); 
set(handles.Update,'Enable','on'); 
 
function sinx_Callback(hObject, eventdata, handles) 
set(handles.Func_Choose,'Value',1);%选择sin函数 
Update_Callback(hObject, eventdata, handles) 
 
function cosx_Callback(hObject, eventdata, handles) 
set(handles.Func_Choose,'Value',2); 
Update_Callback(hObject, eventdata, handles)

【菜单 】3D绘制项

关闭3D图不需要的弹出式菜单功能,分别绘制了peaks、cylinder和sphere的3维图形。

代码语言:javascript
复制
function Plot_3D_Callback(hObject, eventdata, handles) 
% hObject    handle to Plot_3D (see GCBO) 
% eventdata  reserved - to be defined in a future version of MATLAB 
% handles    structure with handles and user data (see GUIDATA) 
set(handles.Func_Choose,'Enable','on'); 
set(handles.Grid,'Enable','on'); 
set(handles.Line_Shape,'Enable','off'); 
set(handles.Range,'Enable','off'); 
set(handles.Update,'Enable','on'); 
 
function peaks_Callback(hObject, eventdata, handles) 
set(handles.Func_Choose,'Value',3); 
set(handles.Grid,'Value',1); 
[X,Y,Z] = peaks; 
surf(X,Y,Z); 
xlabel('x'); 
ylabel('y'); 
zlabel('z'); 
% axis equal; 
grid on; 
title('Peaks'); 
axis([-3 3 -3 3 -10 10]); 
 
function cylinder_Callback(hObject, eventdata, handles) 
set(handles.Func_Choose,'Value',4); 
set(handles.Grid,'Value',1); 
t=0:pi/20:2*pi; 
x=(sin(t)+1)*5; 
y=cos(t)*5; 
z=linspace(0,5,length(t)); 
X=meshgrid(x); 
Y=meshgrid(y); 
Z=[meshgrid(z)]'; 
surf(X,Y,Z); 
xlabel('x'); 
ylabel('y'); 
zlabel('z'); 
axis equal; 
grid on; 
title('Cylinder'); 
axis([0 10 -5 5]); 
for vt=1:4 
    view(-37.5,10*vt); 
end 
 
function sphere_Callback(hObject, eventdata, handles) 
set(handles.Func_Choose,'Value',5); 
set(handles.Grid,'Value',1); 
sphere; 
xlabel('x'); 
ylabel('y'); 
zlabel('z'); 
axis equal; 
grid on; 
title('Sphere');

【菜单 】帮助项

显示信息,并关闭全部弹出式菜单的功能

代码语言:javascript
复制
function help_Callback(hObject, eventdata, handles) 
% hObject    handle to help (see GCBO) 
% eventdata  reserved - to be defined in a future version of MATLAB 
% handles    structure with handles and user data (see GUIDATA) 
set(handles.Func_Choose,'Enable','off'); 
set(handles.Grid,'Enable','off'); 
set(handles.Line_Shape,'Enable','off'); 
set(handles.Range,'Enable','off'); 
set(handles.Update,'Enable','off'); 
 
function about_Callback(hObject, eventdata, handles) 
% hObject    handle to about (see GCBO) 
% eventdata  reserved - to be defined in a future version of MATLAB 
% handles    structure with handles and user data (see GUIDATA) 
helpdlg('Make from WeChat Official Account Platform [DZKR666]!!!!!','更多精彩,等你发现~');

结果展示

所有用到的回调函数都设置好之后,就可以运行测试效果了,本GUI设计还是有比较多的不足,有想法的你,可以再在此基础上直接修改~

直接展示部分运行的结果

GUI游戏分享

分享搜罗的三个GUI设计的游戏源码,没有对应的fig.....

不过不影响运行~

1、俄罗斯方块

2、拼图

3、围棋

结束

关于GUI的使用到此就结篇了,在平常设计的时候,有心情的话,也可以思考思考如何把你现有的脚本设计改成这种GUI的方式,形象化功能的使用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子狂人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 功能介绍
  • 设计解析
    • 更新设置(Tag:Update)
      • 【菜单】文件项
        • 【菜单 】2D绘制项
          • 【菜单 】3D绘制项
            • 【菜单 】帮助项
            • 结果展示
            • GUI游戏分享
            • 结束
            相关产品与服务
            图像处理
            图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档