Matlab 版 (精华区)

发信人: zjliu (秋天的萝卜), 信区: Matlab
标  题: [合集]请教GUI问题
发信站: 哈工大紫丁香 (2004年04月18日19:53:31 星期天), 站内信件


────────────────────────────────────────
 Skyblue (原来的我)                   于 2003年10月31日13:41:58 星期五 说道:

Matlab做多个GUI界面,
用为输入参数及结果输出比较图形也较多,
需要做多个界面,不知如何做多个界面的连接。
其中主界面只提供接口, 只设几个button:
"输入参数"(input_button) "输出图形"(output_button) .....
想用这几个button的callback为相应的独立GUI界面。
比如相应的GUI界面为 Inputvar.m  Outputfig.m...
请教如何 在主界面的button函数写代码以完成调用。
最好给出一点示例!
谢谢!

────────────────────────────────────────
 zjliu (秋天的萝卜)                   于 2003年10月31日13:58:57 星期五 说道:

看看这个小例子:
close all
t=0:pi/100:2*pi;
h_fig=figure;
h_axes=axes('position',[0.04,0.07,0.7,0.58]);
h_push1=uicontrol(h_fig,'style','push',...
'unit','normalized','position',[0.79,0.5,0.16,0.08],...
'BackgroundColor','w','ForegroundColor','r',...
'string','Draw curve','callback','hh=plot(t,sin(t));');
h_push2=uicontrol(h_fig,'style','push',...
'unit','normalized','position',[0.79,0.3,0.16,0.08],...
'BackgroundColor','w','ForegroundColor','r',...
'string','Clear curve','callback','delete(hh);');
h_push3=uicontrol(h_fig,'style','push',...
'unit','normalized','position',[0.79,0.1,0.16,0.08],...
'BackgroundColor','w','ForegroundColor','r',...
'string','New GUI','callback','figure;');

────────────────────────────────────────
 Skyblue (原来的我)                   于 2003年10月31日16:59:33 星期五 说道:

Thanks.
调用另外一个界面没问题。
不过,现在有一个新问题,参数如何传递。
例如:主界面有一个Inputvar_button其函数为:
function Inputvar_button_Callback(hObject, eventdata, handles)
Inputvar;         %  Inputva.m is Interface of Variables Input.
相就调用的Inputvar界面代码为:
function varargout = Inputvar(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @displayback_OpeningFcn, ...
                   'gui_OutputFcn',  @displayback_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin & isstr(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
function velocity_edit_Callback(hObject, eventdata, handles)
velocity = str2double(get(hObject,'string'));
if isnan(velocity)
    errordlg('You must enter a numeric value','Bad Input','modal')
end
function F_edit_Callback(hObject, eventdata, handles)
F = str2double(get(hObject,'string'));
if isnan(F)
    errordlg('You must enter a numeric value','Bad Input','modal')
end
............................................
如今想把Inputvar子界面的参数velocity,F......等传递到主界面,
我用global变量,没有成功。
请问怎么实现参数值传递 ?!?!
谢谢!

────────────────────────────────────────
 zjliu (秋天的萝卜)                   于 2003年10月31日17:10:39 星期五 说道:

建议你做gui的时候不要把程序写成函数文件,
特别是句柄容易出问题,在写函数文件的时候
注意变量的输出

────────────────────────────────────────
 Skyblue (原来的我)                   于 2003年10月31日17:27:45 星期五 说道:

我用的是“用户界面设计工具”(Matlab6.5)做的GUI,
有点像VB,所以,都是一些回调函数。
如果用你前面给的那个例子,命令用set,unicontrol...
直接在 callback,''写代码,是比较直观。
但对GUI图形界面布局很麻烦,特别是Positio:)
请问你提到的变量输出是指哪种操作?!
其实,我想专门做一个参数录入界面,录完之后回到主界面,
然后进行各种选择计算,以及图形显示。
所以参数传递还是不知怎么做。

────────────────────────────────────────
 zjliu (秋天的萝卜)                   于 2003年10月31日18:52:52 星期五 说道:

一般的参数传递应该是没问题的,你注意一下句柄就可以了

────────────────────────────────────────
 Ustcer (山城棒棒儿军)                于 2003年10月31日22:09:16 星期五 说道:



不同的gui间参数的传递方法:
1.全局变量:global(^_^,我最喜欢,不过我知道这个也最不安全)
2.文件读写:通过save,load等命令
3.句柄的data域?,或者其他什么说法,不同fig文件间我没有用过,一个fig下面挺好的
也是最值得推荐的方法
4.varargout 参数 (: 没有用过



--

http://panxsh.nease.net/fengge1.gif

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 210.45.123.232]

────────────────────────────────────────
 Ustcer (山城棒棒儿军)                于 Fri Oct 31 22:16:39 2003 说道:

global必须在你的主界面和你调用的InputDlg中都要申明才行


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