Matlab 版 (精华区)

发信人: zjliu (秋天的萝卜), 信区: Matlab
标  题: [合集]急问MATLAB的GUI编程问题
发信站: 哈工大紫丁香 (2003年05月27日17:39:57 星期二), 站内信件


────────────────────────────────────────
 cephalus (cephalus)                  于 2003年05月26日09:51:14 星期一 说道:

我想在文本框里面输入一个函数,如Y=X^2+3,然后按一下OK键,就可以在界面上画出一
个图象,请问这个文本框和OK键的源代码怎么写法?多谢了,小弟急用!!!

────────────────────────────────────────
 zjliu (秋天的萝卜)                   于 2003年05月26日10:05:39 星期一 说道:

h_fig=figure;
f1='x+3';
text1=uicontrol(h_fig,'style','text',...
'unit','normalized','position',[0.65,0.73,0.27,0.14],...
'ForegroundColor','r',...
'horizontal','left','string',{'输入函数f的表达式(自变量必须是x)'});
h_edit1=uicontrol(h_fig,'style','edit',...
'unit','normalized','position',[0.65,0.57,0.27,0.12],...
'BackgroundColor','w','ForegroundColor','black',...
'horizontal','left','callback','f1=get(gcbo,''string'');');
h_axes1=axes('parent',h_fig,...
'unit','normalized','position',[0.04,0.14,0.56,0.48],...
'xlim',[-6 6],'fontsize',8);
h_push1=uicontrol(h_fig,'style','push',...
'unit','normalized','position',[0.75,0.38,0.12,0.07],...
'BackgroundColor','w','ForegroundColor','r',...
'string','OK / (plot)','callback',['axes(h_axes1);','y=subs(f1,-6:.1:6);',...
    'plot(-6:.1:6,y);']);

────────────────────────────────────────
 bestwish (牛的惊动了国务院)          于 Mon May 26 10:06:01 2003) 说道:


Y=X^2+3是不是自变量和因变量之间的对应法则?
是的话,只用写ok件的代码就可以了





────────────────────────────────────────
 cephalus (cephalus)                  于 2003年05月26日10:08:08 星期一 说道:

是的,但是系统怎么识别y和x是自变量和因变量啊?要不要定义一下啊?
那ok函数的怎么写啊?

────────────────────────────────────────
 bestwish (牛的惊动了国务院)          于 Mon May 26 10:08:51 2003) 说道:

你给的是matlab老版本的命令格式吧?matlab6.x中好像不用这么复杂






────────────────────────────────────────
 zjliu (秋天的萝卜)                   于 2003年05月26日10:10:21 星期一 说道:

呵呵,习惯老版本了。这个在新版本也能用

────────────────────────────────────────
 bestwish (牛的惊动了国务院)          于 Mon May 26 10:11:59 2003) 说道:

可以识别,比如说
X=1:10;(这个根据你的需要)

你读取edit控件中的内容
用字符串接受:str='Y=X^2+3';
然后可用eval(str)命令







────────────────────────────────────────
 bestwish (牛的惊动了国务院)          于 Mon May 26 10:27:30 2003) 说道:

% --------------------------------------------------------------------
function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)
h_edit1=findobj(get(h,'Parent'),'Tag','edit1');
str=char(get(h_edit1,'string'));
X=1:10;
eval(strcat(str,';'));
figure
plot(X,Y)

在文本框中输入:Y=X.^2+3;






────────────────────────────────────────
 bestwish (牛的惊动了国务院)          于 Mon May 26 10:28:16 2003) 说道:

在文本框中输入Y=X.^2+3






────────────────────────────────────────
 cephalus (cephalus)                  于 2003年05月26日10:30:02 星期一 说道:

请问zjliu大侠,我想把“输入函数f的表达式(自变量必须是x)”这个字符串变成editt
ext里面的内容,应该如何处理?
谢谢

────────────────────────────────────────
 cephalus (cephalus)                  于 2003年05月26日10:37:00 星期一 说道:

请问h_edit1是不是就是那个edittext的tag啊?

────────────────────────────────────────
 bestwish (牛的惊动了国务院)          于 Mon May 26 10:39:18 2003) 说道:

h_edit1是‘Tag’为‘edit1’的句柄





────────────────────────────────────────
 cephalus (cephalus)                  于 2003年05月26日10:44:11 星期一 说道:

我运行了一下,还是不行,matlab报错为:
On line 42  ==>     gui_mainfcn(gui_State, varargin{:});
??? Error while evaluating uicontrol Callback.
??? Undefined function or variable 'h'.
Error in ==> E:\MATLAB6p5\work\DrawGraphic.m (pushbutton1_Callback)
On line 163  ==> hedit1=findobj(get(h,'Parent'),'Tag','edit1');
Error in ==> E:\MATLAB6p5\toolbox\matlab\uitools\gui_mainfcn.m
On line 66  ==>         feval(varargin{:});
Error in ==> E:\MATLAB6p5\work\DrawGraphic.m
On line 42  ==>     gui_mainfcn(gui_State, varargin{:});
??? Error while evaluating uicontrol Callback.

────────────────────────────────────────
 zjliu (秋天的萝卜)                   于 2003年05月26日10:48:09 星期一 说道:

我修改了一下,现在你按下按钮,就能画出图,且把edittext的内容显示
在text里面。
h_fig=figure;
f1='x+3';
text1=uicontrol(h_fig,'style','text',...
'unit','normalized','position',[0.65,0.73,0.27,0.14],...
'ForegroundColor','r',...
'horizontal','left','string',{});
h_edit1=uicontrol(h_fig,'style','edit',...
'unit','normalized','position',[0.65,0.57,0.27,0.12],...
'BackgroundColor','w','ForegroundColor','black',...
'horizontal','left','callback','f1=get(gcbo,''string'');');
h_axes1=axes('parent',h_fig,...
'unit','normalized','position',[0.04,0.14,0.56,0.48],...
'xlim',[-6 6],'fontsize',8);
h_push1=uicontrol(h_fig,'style','push',...
'unit','normalized','position',[0.75,0.38,0.12,0.07],...
'BackgroundColor','w','ForegroundColor','r',...
'string','OK / (plot)','callback',['axes(h_axes1);','y=subs(f1,-6:.1:6);',...
    'plot(-6:.1:6,y);','set(text1,''string'',f1);']);

────────────────────────────────────────
 bestwish (牛的惊动了国务院)          于 Mon May 26 10:50:59 2003) 说道:


是不是版本的问题啊?我用的是6.1版
点击pushbutton1时将调用函数
function varargout =pushbutton1_Callback(h, eventdata, handles, varargin)
第一个输入参数就是h,怎么会提示“Undefined function or variable 'h'”呢?
我刚才给的程序在6.1版中运行成功

你用的是6.5版本吧?查找tag为'edit1'控件的句柄方法可能不一样
你换一下




────────────────────────────────────────
 cephalus (cephalus)                  于 2003年05月26日11:06:43 星期一 说道:

是的,我的这个MATLAB版本是6。5
可不可以把你的那个M文件有全部帖一下,我在别人的机子里面试一试!
谢谢!

────────────────────────────────────────
 bestwish (牛的惊动了国务院)          于 Mon May 26 11:11:36 2003) 说道:


在guide中我建立的是nihaoma.fig
对应的m文件是nihaoma.m,下面有。
运行时还得有nihaoma.fig文件,这个这里没有办法贴啊,你email是多少
作为附件我全部给法过去

function varargout = nihaoma(varargin)
% NIHAOMA Application M-file for nihaoma.fig
%    FIG = NIHAOMA launch nihaoma GUI.
%    NIHAOMA('callback_name', ...) invoke the named callback.

% Last Modified by GUIDE v2.0 26-May-2003 10:16:16

if nargin == 0  % LAUNCH GUI

fig = openfig(mfilename,'reuse');

% Use system color scheme for figure:
set(fig,'Color',get(0,'defaultUicontrolBackgroundColor'));

% Generate a structure of handles to pass to callbacks, and store it. 
handles = guihandles(fig);
guidata(fig, handles);

if nargout > 0
varargout{1} = fig;
end

elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK

try
if (nargout)
[varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard
else
feval(varargin{:}); % FEVAL switchyard
end
catch
disp(lasterr);
end

end


%| ABOUT CALLBACKS:
%| GUIDE automatically appends subfunction prototypes to this file, and 
%| sets objects' callback properties to call them through the FEVAL 
%| switchyard above. This comment describes that mechanism.
%|
%| Each callback subfunction declaration has the following form:
%| <SUBFUNCTION_NAME>(H, EVENTDATA, HANDLES, VARARGIN)
%|
%| The subfunction name is composed using the object's Tag and the 
%| callback type separated by '_', e.g. 'slider2_Callback',
%| 'figure1_CloseRequestFcn', 'axis1_ButtondownFcn'.
%|
%| H is the callback object's handle (obtained using GCBO).
%|
%| EVENTDATA is empty, but reserved for future use.
%|
%| HANDLES is a structure containing handles of components in GUI using
%| tags as fieldnames, e.g. handles.figure1, handles.slider2. This
%| structure is created at GUI startup using GUIHANDLES and stored in
%| the figure's application data using GUIDATA. A copy of the structure
%| is passed to each callback.  You can store additional information in
%| this structure at GUI startup, and you can change the structure
%| during callbacks.  Call guidata(h, handles) after changing your
%| copy to replace the stored original so that subsequent callbacks see
%| the updates. Type "help guihandles" and "help guidata" for more
%| information.
%|
%| VARARGIN contains any extra arguments you have passed to the
%| callback. Specify the extra arguments by editing the callback
%| property in the inspector. By default, GUIDE sets the property to:
%| <MFILENAME>('<SUBFUNCTION_NAME>', gcbo, [], guidata(gcbo))
%| Add any extra arguments after the last argument, before the final
%| closing parenthesis.



% --------------------------------------------------------------------
function varargout = edit1_Callback(h, eventdata, handles, varargin)




% --------------------------------------------------------------------
function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)
h_edit1=findobj(get(h,'Parent'),'Tag','edit1');
str=char(get(h_edit1,'string'));
X=1:10;
eval(strcat(str,';'));
figure
plot(X,Y)





────────────────────────────────────────
 cephalus (cephalus)                  于 2003年05月26日11:13:03 星期一 说道:

我的邮箱是jscephalus@tom.com;finesnow2000@163.com
多谢了

────────────────────────────────────────
 bestwish (牛的惊动了国务院)          于 Mon May 26 11:19:30 2003) 说道:

发过去了,你看看吧




────────────────────────────────────────
 cephalus (cephalus)                  于 2003年05月26日11:27:38 星期一 说道:

我在那个文本框里面写了一个y=x.^2+1
结果显示没有定义x,是什么原因啊?
3x

────────────────────────────────────────
 bestwish (牛的惊动了国务院)          于 Mon May 26 13:25:07 2003) 说道:


程序里面定义的是X与Y
所以输入时应该写成Y=X.^2+1

再就是要不程序写成x与y,输入时y=x.^2+1也行




────────────────────────────────────────
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:208.713毫秒