📄 matlab的gui设计- tivy - 新浪blog.htm
字号:
target=_self>我的运动生涯</A></DIV></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD class=ico vAlign=top align=middle width=20><FONT
style="FONT-SIZE: 6px">■</FONT></TD>
<TD class=dashed>
<TABLE cellSpacing=0 cellPadding=0 width="100%"
border=0>
<TBODY>
<TR>
<TD>
<DIV class=sysBr180><A title=""
onclick="this.href='#sort_1';get('/sns/service.php?m=aList&uid=1266711891&sort_id=1', '/xsl/aList.xsl', 'aList_1', 'output', 'box_2')"
href="http://blog.sina.com.cn/u/4b807d53010007bl#sort_1"
target=_self>Reading</A></DIV></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD class=ico vAlign=top align=middle width=20><FONT
style="FONT-SIZE: 6px">■</FONT></TD>
<TD class=dashed>
<TABLE cellSpacing=0 cellPadding=0 width="100%"
border=0>
<TBODY>
<TR>
<TD>
<DIV class=sysBr180><A title=""
onclick="this.href='#sort_3';get('/sns/service.php?m=aList&uid=1266711891&sort_id=3', '/xsl/aList.xsl', 'aList_3', 'output', 'box_2')"
href="http://blog.sina.com.cn/u/4b807d53010007bl#sort_3"
target=_self>游山玩水</A></DIV></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR height=10>
<TD></TD></TR>
<TR class=bottom>
<TD></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR class=line>
<TD></TD></TR></TBODY></TABLE></DIV>
<DIV id=labelFM000013>
<SCRIPT
src="matlab的GUI设计- tivy - 新浪BLOG.files/article_index_new.js"></SCRIPT>
</DIV></DIV>
<DIV class=margin></DIV></TD>
<TD class=box_2 vAlign=top>
<DIV class=margin>
<DIV id=labelFM000012>
<DIV class=add><IMG
src="matlab的GUI设计- tivy - 新浪BLOG.files/blank.gif" align=absMiddle
border=0>
<SCRIPT language=javascript
src="matlab的GUI设计- tivy - 新浪BLOG.files/checkzone4.htm"
type=text/javascript></SCRIPT>
</DIV></DIV></DIV>
<DIV class=margin id=box_2>
<CENTER>
<DIV class=article>
<TABLE id=article4b807d53010007bl cellSpacing=0 cellPadding=0
border=0>
<TBODY>
<TR>
<TD align=middle>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR class=sysHand
onclick="javascript:hide('articleBody4b807d53010007bl');swap('articleTitle4b807d53010007bl','className','up','down');">
<TD class=up id=articleTitle4b807d53010007bl>
<DIV class="sysBr500 title"
id=commentText4b807d53010007bl>matlab的GUI设计</DIV></TD></TR></TBODY></TABLE></TD></TR>
<TR id=articleBody4b807d53010007bl>
<TD class=aBody>
<TABLE cellSpacing=0 cellPadding=0 align=center border=0>
<TBODY>
<TR>
<TD class=author><IMG class=man
src="matlab的GUI设计- tivy - 新浪BLOG.files/sun.gif"><SPAN
class=time>2006-12-28 10:30:44</SPAN></TD></TR></TBODY></TABLE>
<TABLE class=dashed cellSpacing=0 cellPadding=0 align=center
border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE>
<TABLE class=aSize cellSpacing=0 cellPadding=0 align=center
border=0>
<TBODY>
<TR>
<TD align=right>
<STYLE>.A_font_change_big {
FONT-SIZE: 16px; LINE-HEIGHT: 27px
}
.A_font_change_big A {
FONT-SIZE: 16px; LINE-HEIGHT: 27px
}
.A_font_change_mid {
FONT-SIZE: 14px; LINE-HEIGHT: 24px
}
.A_font_change_mid A {
FONT-SIZE: 14px; LINE-HEIGHT: 24px
}
.A_font_change_sml {
FONT-SIZE: 12px; LINE-HEIGHT: 21px
}
.A_font_change_sml A {
FONT-SIZE: 12px; LINE-HEIGHT: 21px
}
</STYLE>
<A
onclick="addClass('articleText4b807d53010007bl','A_font_change_big')"
href="javascript:;">大</A><A
onclick="addClass('articleText4b807d53010007bl','A_font_change_mid')"
href="javascript:;">中</A><A
onclick="addClass('articleText4b807d53010007bl','A_font_change_sml')"
href="javascript:;">小</A></TD></TR></TBODY></TABLE>
<TABLE class=description cellSpacing=0 cellPadding=0
align=center border=0>
<TBODY>
<TR>
<TD align=middle>
<DIV class="sysBr500 text"
id=articleText4b807d53010007bl align=left>
<P><A
href="http://blog.sina.com.cn/main/html/showpic.html#url=http://album.sina.com.cn/pic/4b807d5302000g6u"
target=_blank></A>
这个学期选了一门《视频处理与通信》的课,教材用的是WangYao的那本,中文版的买不到,只好买了本英文的,还好英语的阅读水平还不错,马马虎虎的看下来,没什么大问题。<BR>
中间做了两个编程的作业,都是用matlab处理图片,要求有GUI,能够对处理前后的图片进行对比,还要通过GUI输入相关参数。通过这两个作业,使我不得不感到Matlab的功能实在是太强大了。以前我一直以为matlab只适合数据的处理,看处理结果的话用plot画一个figure就够了,想不到它还能做出这么pp的GUI来。下面是我设计的一个GUI的截图,这个程序主要是实现一个对图像的矢量量化编码,量化矢量的大小和码本的大小可变,采用GLA算法,并把原始图像和量化后重建的图像进行对比:</P>
<DIV><A
href="http://blog.sina.com.cn/main/html/showpic.html#url=http://album.sina.com.cn/pic/4b807d5302000g6u"
target=_blank><IMG style="WIDTH: 478px; HEIGHT: 359px"
height=511
src="matlab的GUI设计- tivy - 新浪BLOG.files/4b807d5302000g6u.jpg"
width=616 border=0></A></DIV>
<DIV> </DIV>
<DIV>实现方式的选择:GUIDE还是全脚本?<BR>
大多数介绍matlab的书中都介绍了matlab自带的GUI设计工具-GUIDE,它的一个好处就是非常容易入手,风格很像VB,相关的控件可以随便拖来用,它们的位置和大小也可以像拖windows一样方便。但是GUIDE生成的是一个fig文件,它同时还会生成一个包含了fig中放置的控件的相关回调函数的m脚本。这两个文件照理说是互相影响的,但是很奇怪的是当你改动了其中一个文件的内容,比如我在fig中删掉一个原来的控件,但m脚本中对应的该控件的回调函数却仍然存在,虽说这样也没什么关系,反正回调函数是空的,但是我就是感觉有点不爽,这不是破坏了程序架构的美感了么!(当然我们可以手动删掉这些代码)。所以一开始鼓捣了半天后,我就毅然抛弃了GUIDE。<BR>
用全脚本实现的话应该怎么入门呢?写代码的最好入门就是读代码,hehe!
matlab就自带了这么一个经典的demo,那就是edgedemo,一个全脚本实现GUI的经典例子。当我们在命令行中敲入edit
edgedemo.m,就可以看到这个demo的代码了。花了一个晚上把这个700多行的代码看完后,我才有豁然开朗的感觉,GUIDE提供的功能简直就只是matlab所提供的句柄的功能的冰山一角。在这个demo里,像什么axes,iamge以及uicontrol中的popupmenu,text,frame,radiobutton,edit,pushbutton等等都用到了,顺便还能了解一下matlab里句柄函数的参数传递,再结合一本matlab的书(比如精通XX),就可以更直观而快速地掌握GUI设计的技巧了。下面总结一下用m文件实现GUI,相比用GUIDE的几大差异:<BR>1.
代码可复用,节省成本; <BR>2.
GUIDE还没有实现创建uitoolbox;<BR>3. GUIDE不能创建所有axes的子对象;<BR>4.
写界面也有一些算法,在GUIDE中无法实现。而用m文件就可以实现在不同窗口尺寸下给对象以合适的位置;<BR>5.
m文件可以生成非常复杂的界面;<BR>6. 采用GUIDE编程,代码编译后依赖于*.fig文件;<BR>7.
m文件可以实现组件;<BR>8.
m文件创建的对象,可以方便的在handle中存取数据;<BR>9.m文件可以将创建对象代码与动作执行代码很好的结合起来。<BR>在这里我要鼓吹:让GUIDE滚到历史的垃圾堆里去,全脚本的GUI时代万岁!</DIV></DIV></TD></TR></TBODY></TABLE>
<TABLE class=dashed cellSpacing=0 cellPadding=0 align=center
border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE>
<TABLE class=function cellSpacing=0 cellPadding=0 align=center
border=0>
<TBODY>
<TR>
<TD><A
href="javascript:get('/sns/service.php?m=comment&blog_id=4b807d53010007bl&time=1179029943','/xsl/comment.xsl','comment_4b807d53010007bl','output','gload');">评论(18)</A>┆<A
href="http://blog.sina.com.cn/control/writing/scriber/article_add_by_quote.php?blog_id=4b807d53010007bl"
target=_blank>引用</A>┆<A
href="http://blog.sina.com.cn/myblog/article/article_reader.php?blog_id=4b807d53010007bl"
target=_blank>阅读(727)</A>┆<A
href="javascript:get('/sns/service.php?m=circleinfo&blog_id=4b807d53010007bl','/xsl/circle.xsl','circleinfo_4b807d53010007bl','output','gload');">圈子</A>┆<A
href="http://blog.sina.com.cn/myblog/article/article_print.php?blog_id=4b807d53010007bl"
target=_blank>打印</A>┆<A
onclick="new dialog().showWindow('/advice/impeach.php?url=' + escape(document.location.href),'510','495');"
href="javascript:;">有奖举报</A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 align=center border=0>
<TBODY>
<TR>
<TD id=articleChild4b807d53010007bl
style="DISPLAY: none"></TD></TR></TBODY></TABLE></DIV></CENTER>
<SCRIPT src=""></SCRIPT>
<DIV id=gload></DIV></DIV>
<DIV class=margin></DIV></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE class=sysW770 cellSpacing=0 cellPadding=0 align=center border=0>
<TBODY>
<TR>
<TD class=bodyBottom></TD></TR></TBODY></TABLE>
<TABLE class="sysW770 sysFoot" cellSpacing=0 cellPadding=0 align=center
border=0>
<TBODY>
<TR>
<TD align=middle><BR>
<SCRIPT language=javascript type=text/javascript>BROWSER == "ie5" ? dw('<script language="javascript" type="text/javascript" src="/js/foot_gbk.js"></scr' + 'ipt>') : dw('<script language="javascript" type="text/javascript" src="/js/foot_utf8.js"></scr' + 'ipt>');</SCRIPT>
</TD></TR></TBODY></TABLE>
<SCRIPT src="matlab的GUI设计- tivy - 新浪BLOG.files/tmp.js" type=text/javascript
charset=gb2312></SCRIPT>
<SCRIPT type=text/javascript> function watchForceRefresh(){ var watcher = function (){ var hash = location.hash; var reg = /_forceRefreshAtOnce_/g; if (reg.test(hash)){ location.href = location.href.replace(reg,"_").replace(/_+/,"_").replace(/(\?.*)?\#/,"?"+Math.round(Math.random()*100000)+"#"); } } window.setInterval(watcher,500); } watchForceRefresh(); </SCRIPT>
<SCRIPT language=javascript type=text/javascript>var gblog_id = "4b807d53010007bl"; var sAnchor = getAnchor() + ""; var sSort = sAnchor.split('_'); switch(sSort[0]){ case "feeds": get('/sns/service.php?m=feeds&uid='+UID,'/xsl/feeds.xsl','feeds_1','output','box_2'); BONLOADMARK = false; break ; case "circleinfo": get('/sns/service.php?m=circleinfo&blog_id='+gblog_id,'/xsl/circle.xsl','circleinfo_1','output','gload'); BONLOADMARK = false; break; case "gbook": get('/sns/service.php?m=gbook&uid='+UID,'/xsl/gbook.xsl','gbook_1','output','box_2'); BONLOADMARK = false; break; case "comment": get('/sns/service.php?m=comment&blog_id='+gblog_id ,'/xsl/comment.xsl','comment_1','output','gload'); BONLOADMARK = false; break; case "serial": get('/sns/service.php?m=serial&my_id='+sSort[1],'/xsl/serial.xsl','serial_' + sSort[1],'output','box_2'); BONLOADMARK = false; break; case "sort": get('/sns/service.php?m=aList&sort_id='+sSort[1]+'&uid=' + UID,'/xsl/aList.xsl','aList_' + sSort[1],'output','box_2'); BONLOADMARK = false; break; case "aList": get('/sns/service.php?m=aList&uid='+UID,'/xsl/aList.xsl','aList','output','box_2'); BONLOADMARK = false; break; default : get('/sns/service.php?m=comment&blog_id='+gblog_id ,'/xsl/comment.xsl','comment_1','output','gload'); BONLOADMARK = false; break; } // Init initLoad(); new dialog().init();</SCRIPT>
<SCRIPT language=javascript src="matlab的GUI设计- tivy - 新浪BLOG.files/out_js.htm"
type=text/javascript></SCRIPT>
<SCRIPT language=javascript type=text/javascript>if(typeof UID) {document.write('<img style="display:none" src="http://util.blog.sina.com.cn/rr?-'+UID+'">');}</SCRIPT>
<SPAN style="DISPLAY: none" expara=""
url="http://blog.sina.com.cn/u/4b807d53010007bl" key="4b807d53010007bl" pid="1"
name="pvcounter"></SPAN>
<SCRIPT id=PVCOUNTER_FORIE type=text/javascript></SCRIPT>
<SCRIPT src="matlab的GUI设计- tivy - 新浪BLOG.files/pvcounter.js"
type=text/javascript></SCRIPT>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -