EDA365电子论坛网

标题: 《掌握和精通matlab之gui》的疑问请教大神。 [打印本页]

作者: tobias    时间: 2020-7-17 13:47
标题: 《掌握和精通matlab之gui》的疑问请教大神。
如题:程序如下
, Q1 l, M, F( Y; Tfunction exm1151_1( )( ?- j$ j/ P( D/ }& O, o
global hedit hpop hlist/ }# v7 w2 e% ?' G) y  R+ w. A# `4 C, ]3 y
clf reset                                                                                                        %                                                <1>5 _0 N8 V1 a) Q# y' }( L! w) q0 K! j
set(gcf,'unit','normalized','position',[0.1,0.4,0.85,0.35]);%设置图形窗大小
- D8 G; v1 w' H+ \" n" f. kset(gcf,'defaultuicontrolunits','normalized');% e9 f& D3 A! }) P5 i. R
set(gcf,'defaultuicontrolfontsize',11);
' t3 @# h: i- n$ V& Fset(gcf,'defaultuicontrolfontname','隶书');8 N/ |1 K+ N3 @8 `( A- B1 P1 E
set(gcf,'defaultuicontrolhorizontal','left');
" l4 U) R8 e0 K2 w8 Bset(gcf,'menubar','none');                                                                %删除图形窗工具条/ w% I( f6 X9 l" O, F
str='通过多行指令绘图的交互界面';7 k: D4 m# T% H
set(gcf,'name',str,'numbertitle','off');                                %书写图形窗名0 [. Q4 b& G+ o& t- o, d* h* A9 V5 O
h_axes=axes('position',[0.05,0.15,0.45,0.70],'visible','off');%定义轴位框位置  3 W6 o  ~' I' E2 u
uicontrol(gcf,'Style','text',...                                                %制作静态文本框
+ B  t  A; K- R) l8 h4 W   'position',[0.52,0.87,0.26,0.1],...6 i* r9 |2 ]1 w6 S) n/ z8 j
   'String','绘图指令输入框');
9 B( r$ \5 ~/ v- vhedit=uicontrol(gcf,'Style','edit',...                                %制作可编辑文本框                <14>
- `+ F: x3 d- G( b   'position',[0.52,0.05,0.26,0.8],...! a0 P: G, n1 Z# Z- ^& _/ i
   'Max',2);                                                        %取2,使Max-Min>1,而允许多行输入                <16>$ W0 k3 O. H3 R
hpop=uicontrol(gcf,'style','popup',...                                %制作弹出菜单                        <17>. @* ]) ~) t% n- f) J) ?
   'position',[0.8,0.73,0.18,0.12],...
. w# O: m  G+ u9 O9 C   'string','spring|summer|autumn|winter');%设置弹出框中选项名                        <19>
  |3 D5 r5 h* p2 x3 \! ~% Xhlist=uicontrol(gcf,'Style','list',...                                %制作列表框                        <20>% t0 B' `" m# \4 r5 N, \; h
   'position',[0.8,0.23,0.18,0.37],...5 D; b# y% U/ L
   'string','Grid on|Box on|Hidden off|Axis off',...%设置列表框中选项名        <22>: [; L3 w- s1 P/ F2 {4 T0 W, R9 B
   'Max',2);                                                        %取2,使Max-Min>1,而允许多项选择                <23>
: ^6 A" I1 j0 l  o9 h- K9 _hpush=uicontrol(gcf,'Style','push',...        %制作与列表框配用的按键                        <24>
8 y; w8 E$ U' P+ e7 b2 z& v- J   'position',[0.8,0.05,0.18,0.15],'string','Apply');%                        <25>
. H% Z. S% @6 s. s5 j& \set(hedit,'callback','calledit1');        %编辑框输入引起回调        <26>
6 p( ^2 f% I0 I/ Wset(hpop,'callback','calledit1');        %弹出框选择引起回调        <27>
& U3 c! Q0 n& e' x. J3 B% a: `. M# Xset(hpush,'callback','calledit1');        %按键引起的回调                <28>
1 {+ E: H( H( @- r3 A7 ofunction calledit1( )- L) }" v: l, H; d, ^6 f3 E
global hedit hpop hlist5 T$ j% x  }& n2 k$ @7 h
ct=get(hedit,'string');                                %获得输入的字符串函数                                        <2>
/ C+ m. g) {% g& R' a# _8 Avpop=get(hpop,'value');                                %获得选项的位置标识                                                <3>
, S- v$ {7 ?, I8 }2 uvlist=get(hlist,'value');                        %获得选项位置向量                                                        <4>$ W/ I7 J. s: k; T5 d
if ~isempty(ct)                                                %可编辑框输入非空时                                                <5>8 M& q! k0 t8 ^3 @. r$ s9 `
   eval(ct')                                                        %运行从编辑文本框送入的指令                                <6>      
- p1 E! D% x: N1 K: }% ?" ^   popstr={'spring','summer','autumn','winter'};                %弹出框色图矩阵        <7># h: W) \$ S( t( h7 j
   liststr={'grid on','box on','hidden off','axis off'};%列表框选项内容        <8>       3 E* e! S: `2 o0 w( r: Q( g
   invstr={'grid off','box off','hidden on','axis on'};%列表框的逆指令        <9>; p2 D1 v9 Y# a/ r0 x
   colormap(eval(popstr{vpop}))                %采用弹出框所选色图                                        <10>
( N5 X! D6 R0 p! E# \9 r/ y1 c) R   vv=zeros(1,4);vv(vlist)=1;               * T# L5 o; c( ~! T5 ]" n
   for k=1:4
  q" G  p7 L, a& J( b! `      if vv(k);eval(liststr{k});else eval(invstr{k});end %按列表选项影响图形7 Y/ H$ v# f8 o( n) m
   end
  p! |: g  q8 R0 F4 t3 Iend* h* }" T4 ], ~- L
《掌握和精通matlab之gui》的代码,
6 s2 {% ]. X- A6 G; V" f可是按照此书上的例子运行出现:Undefined function or variable 'calledit1'. Error while evaluating UIControl Callback
3 X; H9 k# x7 m9 j: h" ~
# Z# _) b% B( l  K" q
书上的例子出的图

+ N4 J$ k" B+ R. Q) x请教大神,非常感谢!
, [. l, w7 R  {( r' R
2 z4 b+ ^; {" g' G( s$ r/ q: |9 ^" i; D, \# n$ k4 k

作者: fanichicl    时间: 2020-7-17 14:41
eval(ct')    ,为什么要用单个单引号?eval(ct)或者eval(‘ct’),不可以呢?




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2