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毫秒