基于MATLAB的GUI设计应用软件

基于MATLAB的GUI设计应用软件


2024年6月12日发(作者:)

MicrocomputerApplicationsVol.27,No.8,2011

文章编号:

1007-757X(2011)08-0053-03

技术交流微型电脑应用2011年第27卷第8期

基于

MATLAB

GUI

设计应用软件

龚妙昆

摘要:在MATLAB的GUI(GraphicUserInterface)基础上,充分地利用了UITABLE(图形界面表格)的特性,结合了运筹学

中的一些优化算法,设计了一款综合应用软件,它包括了线性规划、图论、存储论等优化内容。利用MATLAB中提供的编

译命令,可将其编译为能在Windows环境下运行的“Window”型应用软件。

关键词:MATLAB图形用户界面

中图分类号:TP202

图形界面表格运筹学

文献标志码:A

表格)变量的图形输入界面的设计、使用方法。该程序经过

编译,可在Windows环境下独立使用。

0引言

MATLAB的名称取自于MATrixLABoratory两个单词

的各自前3个字母,是一种基于矩阵运算的数值计算环境和

编程语言。它将高性能的数值计算功能和可视化特点集成于

一体,提供了大量的内置函数,因此被广泛地应用于各个领

域的科学计算。由于MATLAB的开放性,使得MATLAB

的功能不继得到完善和扩充。目前的MATLAB提供了众多

的工具箱函数,如信号处理、控制系统、最优化等。MATLAB

还有强大便捷的绘图功能,留给用户的是友好的命令界面和

二维和三维绘图界面。GUI是MATLAB的另一个重要特色。

利用GUI,可以制作一些操作简单的专用工具,譬如,演示

某些技术、方法或一些小的应用软件。在参考文献[1]中,

就有许多关于高等数学、大学物理等方面的演示性例子。在

这些例子中,变量、参量的输入都是比较简单的、少量的,

因此功能也是单一的,尤其是还没有矩阵(或表格)型变量

的图形输入界面。在MATLAB中,矩阵(或表格)型数据

的输入输出,通常是利用读取EXCEL或输出到EXCEL文

件来实现的。文献[2]利用ActiveX控件方法,只实现了矩阵

(或表格)型数据的图形输出界面,没有直接的图形录入界

面。

本文主要介绍两方面的内容:其一,介绍一个简易物流

仓储系统的整体框架和基本功能,如图1所示:

1用户图形界面简介

图形用户界面的程序是在图形界面下创建与用户交互

的控件元素,使用户可以通过操作这些交互控件实现特定的

功能,并且可以返回显示在程序界面相应的结果显示区域

中。MATLAB的GUI编程可以用两种方式实现。一是直观

的GUI设计工具GUIDE,二是利用M文件代码构建界面,

即M文件界面设计。虽然这种方法使用起来略显麻烦,但

过程准确,结果简练。事实上,不管采用哪种设计方法,都

要经过内容分析、构思草图、控件布局和代码编写等过程。

2系统的总体设计和子系统功能介绍

本系统采用代码编写GUI界面,系统的主界面如图1。

分五个子系统,启动子系统的方式有两种,一种是菜单方式;

另一种是图标按钮方式。其中:

(1)子系统[供需优化]:处理在一定运价下,货物的供

应地与需求地之间的优化运输问题。其界面如图2所示:

图1一个小型物流企业的优化系统

图2供需优化窗口

一个小型物流企业的优化系统;其二,着重介绍矩阵(或

——————————————

它的主要窗口为运输价格表的输入。

(2)子系统[路线优化]:处理运输过程中的最短路径问

作者简介:龚妙昆(1959-),男,华东师范大学数学系讲师,研究方向:控制理论研究与应用,上海,200241

53

MicrocomputerApplicationsVol.27,No.8,2011技术交流微型电脑应用2011年第27卷第8期

题,采用的算法是Floyd算法。它的主窗口是各个节点之间

的距离输入表格。

(3)子系统[装车优化]:依据背包原理进行算法设计。

(4)子系统[配送优化]:针对运输路线中各节点上即有

卸货又有装货的情况,而设计的优化算法。

(5)子系统[库存优化]:考虑了两类存贮模型。其一为

不能缺货,但能及时补充货物的模型;其二为提前订货模型。

界面如图3所示:

则在窗口图形f中,建立一个列名为:A,B,C,D,E的

5×5的表格。

当表格超出指定范围时,会自动出现滚动条,通常将表

格的大小(或者说是矩阵的维数)设计成与实际问题相适应

的范围内。

4主界面背景设计和标题栏图标设计

利用在轴对象中插入图片的方式实现。代码如下:

hf=figure('Color',[0.8,0.8,0.8],...%%设定主界面

'Position',[150,200,800,600],...

,...);

%%%%%%设置背景图片%%%%%

ha=axes('Position',[0011]);

imshow(imread(''));

%%%%设置特殊图标%%%%%

figFrame=get(hf,'JavaFrame');

newIcon=con('');

ureIcon(newIcon);

其中的''为图标图片文件,''为背景图片文件。

另外,第一个模块的编码为:

hpub1=uicontrol(hf,'Style','pushbutton',...

'Position',[5022015080],...

'String','供需优化',...

'Fontsize',22,...

'Fontname','隶书',...

'ForegroundColor','blue',...

'CallBack',{@m1});

当触发了该模块后,就执行回调函数m1(程序段略)。

图3库存优化子系统

3UITABLE的基本属性和使用

在上面所介绍的内容中,最主要的是建立矩阵(或表格)

型变量的输入界面。这在以往的文献和书籍中暂未出现。因

此,本文侧重介绍它。MATLAB中的用户界面表格函数为

UITABLE,调用后在图形窗口中,创建一个指定行数和指

定列数的表格。例如

UITABLE(numrows,numcolumns);

再如,在建立用户界面表格的时候,可以指定列(或行)

的名称:

UITABLE(data,columnNames);

它的主要属性有

ColumnNames:Cellarrayofstringsforcolumnnames.

Data:

GridColor:

NumColumns:

NumRows:

t=uitable(3,4);

则在当前窗口中建立一个3行4列的表格,对象的实际大小

默认。再如

f=figure;

t=uitable(f,rand(5),{'A','B','C','D','E'});

54

Cellarrayofvaluestobedisplayedinthe

table

string,RGBvector.

intspecifyingnumberofcolumns.

intspecifyingnumberofrows.

5子系统[路线优化]-图形界面设计

在这个窗口中,主要是布置一个矩阵输入界面,用以表

示各个节点之间的距离,如图4所示:

等。另外,也可以通过下列方式创建具体的表格

图4运输路径中,各节点名称、节点间距离输入界面

(注:两地之间,若无通路,则以10000标识)

MicrocomputerApplicationsVol.27,No.8,2011技术交流微型电脑应用2011年第27卷第8期

优化算法采用Floyd算法。为了使优化后的输出结果有

好的可视性,增加了节点的名称。在编程方面,除了常规的

菜单设计外,还有数据的传递,事件响应的回调函数编写。

下面就其最主要的部分进行介绍。

5.1窗口图形的设计

hf_lxyh=figure('Color',[0.8,0.8,0.8],...

'Position',[200,150,800,600],...

'Menu','none',...%%%关闭系统默认菜单

'NumberTitle','off',...%%关闭系统默认标题

'Name','自制标题');

figFrame=get(hf_lxyh,'JavaFrame');

newIcon=con('');%%自制窗

口左上角图标,替换原MATLAB的默认图标

5.2表格(或矩阵)输入界面的设计

在窗口图形hf_lxyh中,仅说明第二个表格设计代码:

h_t2=uitable(hf_lxyh,...

'NumRows',15,...

'NumColumns',15,...

'Position',[50,50,700,260]);

这样就在指定的位子按照规定的大小建立了15行15

列的表格,如果超过大小范围,则自动出现滚动条,如图

4所示。

5.3表格对象句柄的保存

将该表格对象的句柄置入整个图形界面的数据区里的

程序为

hndllist={h_jds_m,h_t1,h_t2};%%句柄对象组

set(hf_lxyh,'UserData',hndllist);%%句柄对象组储存在

图形窗口的数据区里

5.4表格对象的句柄和表格数据的获取

获取数据的回调函数的主要程序段为

functionyhcb(cbo,eventdata)

hdls=get(gcf,'UserData');%%获取表格句柄

t=get(hdls{3},'Data');%

从表格中获取间距值

fori=1:node_num%%逐行逐列读取数据

forj=1:node_num

ifisempty(t(i,j))

dist(i,j)=0;

elseifischar(t(i,j))

dist(i,j)=str2num(char(t(i,j)));

else

dist(i,j)=t(i,j);

end

end

55

[4]

[3]

[2]

[1]

end

由此获得图形界面表格中的数据。

5.5最短路径Floyd算法和结果的可视化输出

关于Floyd算法,直接编程即可,这里不再赘述。另外,

Floyd算法的结果,包含了任意两点的最短路线。譬如,从

第2节点出发到第5个节点,最优路径为:乙

度为:60。结果如图5所示:

丙戊,长

图5路线优化系统的输出界面

6结束语

本文的主要工作是介绍表格(或矩阵)型数据输入图形

界面设计方法,弥补了以往这方面的不足。通过一个实例的

设计和运用,表明这些设计方法是简单易行和稳定可靠的。

以上图例表明:只要巧妙构思,合理运用GUI等工具,用

MATLAB语言也能设计出“Window”型的软件。由于矩阵运

算在科学计算中的广泛性,可以知道:在MATLAB图形界

面设计中,本文所介绍的方法具有实在的参考价值。程序经

过mcc编译后,能在Windows环境下运行,这就拓广了

MATLAB应用人员的范围。

参考文献:

陈垚光.精通MATLABGUI设计[M].电子工业出版

社,2008.2.

李亚军.在MATLAB图形用户界面设计中使用

ActiveX[J].计算机与数字工程.第34卷(2006)第12期:

135-137.

任毅,袁晓.Matlab语言中两个相位解卷绕命令的分

析与改进——使用Matlab语言[J].微型电脑应用.

2008年第24卷第2期:56-57.:

张宜华.精通MATLAB5[M].清华大学出版社.

1999.6.

(收稿日期:2010.12.20)


发布者:admin,转转请注明出处:http://www.yc00.com/news/1718155168a2747144.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信