Matlab 版 (精华区)

发信人: hahn (有奇☆闭关造文中), 信区: Matlab
标  题: [合集] GUI方面的问题
发信站: 哈工大紫丁香 (Wed Sep 20 17:16:30 2006), 站内

────────────────────────────────────────
  zealotxbq (雪崩光电二极管)       于  (Fri May 26 18:08:16 2006)  说道:

 
 现有一Interface上有三个Edittext,(Tag=edit1,edit2,edit3) 

 以及一个Push Button,(Tag=pushbutton1),

 我在三个edittext和Push Button的callback函数里分别键入以下内容:

 
 function edit1_Callback(hObject, eventdata, handles)

 f1 = str2double(get(hObject,'string'));


 function edit2_Callback(hObject, eventdata, handles)

 f2 = str2double(get(hObject,'string'));


 function pushbutton1_Callback(hObject, eventdata, handles)
 f3=f1+f2;
 set(handles.edit3,'String',double2str(f3));

 我想在点击Pushbutton后,让edit3里显示edit1和edit2内容相加之和
 总是出错误,这个问题困扰了我近72小时了,如能解决,不胜感激!!!



────────────────────────────────────────
  each (each)                      于  (Fri May 26 18:36:27 2006)  说道:


【 在 zealotxbq (雪崩光电二极管) 的大作中提到: 】
:  
:  现有一Interface上有三个Edittext,(Tag=edit1,edit2,edit3) 
:  以及一个Push Button,(Tag=pushbutton1),
:  我在三个edittext和Push Button的callback函数里分别键入以下内容:
:  
:  function edit1_Callback(hObject, eventdata, handles)
:  f1 = str2double(get(hObject,'string'));
:  function edit2_Callback(hObject, eventdata, handles)
: ...................
问题是f1和f2在 pushbutton1中是无效的,这种数据可以同过UserData进行传输,例如在
edit1_Callback中加入set(h0object,'UserData',f1),然后在pushbutton1_Callback中加
入f1=get(handles.edit1,'UserData'),f2也可以同过这种方法传输。
或者也可以干脆将edit1_Callback和edit2_Callback中的语句删除,添加到pushbutton1_
Callback中,写成发f1=str2double(get(handles.edit1,'String'));f2=str2double(ge
t(handles.edit2,'String'));不过这个我还没试过,估计应该好使



────────────────────────────────────────
  zjliu (秋天的萝卜)               于  (Fri May 26 18:36:34 2006)  说道:

看看下面的代码
close all;
E1=uicontrol(gcf,'style','edit',... 
  'unit','normalized','position',[0.06,0.86,0.21,0.07],... 
  'BackgroundColor',0.7*[1,1,1],'ForegroundColor',[0.9,0.1,0.2],... 
  'string','121','fontsize',12,'fontname','times new roman');
E2=uicontrol(gcf,'style','edit',... 
  'unit','normalized','position',[0.06,0.66,0.21,0.07],... 
  'BackgroundColor',0.7*[1,1,1],'ForegroundColor',[0.9,0.1,0.2],... 
  'string','212','fontsize',12,'fontname','times new roman');

E3=uicontrol(gcf,'style','edit',... 
  'unit','normalized','position',[0.06,0.46,0.21,0.07],... 
  'BackgroundColor',0.7*[1,1,1],'ForegroundColor',[0.9,0.1,0.2],... 
  'string','','fontsize',12,'fontname','times new roman');

P1=uicontrol(gcf,'style','push',... 
  'unit','normalized','position',[0.36,0.56,0.21,0.07],... 
  'BackgroundColor',0.7*[1,1,1],'ForegroundColor',[0.9,0.1,0.2],... 
  'string','sum','fontsize',12,'fontname','times new roman',...
  'callback',['a1=str2num(get(E1,''string''));',...
      'a2=str2num(get(E2,''string''));',...
      'set(E3,''string'',num2str(a1+a2));']);

【 在 zealotxbq (雪崩光电二极管) 的大作中提到: 】
:  现有一Interface上有三个Edittext,(Tag=edit1,edit2,edit3) 
:  以及一个Push Button,(Tag=pushbutton1),
:  我在三个edittext和Push Button的callback函数里分别键入以下内容:
: ...................



────────────────────────────────────────
  friendchj (春夏秋冬)             于  (Fri May 26 19:42:32 2006)  说道:


【 在 zealotxbq (雪崩光电二极管) 的大作中提到: 】
:  
:  现有一Interface上有三个Edittext,(Tag=edit1,edit2,edit3) 
:  以及一个Push Button,(Tag=pushbutton1),
:  我在三个edittext和Push Button的callback函数里分别键入以下内容:
:  
:  function edit1_Callback(hObject, eventdata, handles)
:  f1 = str2double(get(hObject,'string'));
:  function edit2_Callback(hObject, eventdata, handles)
: ...................


function edit1_Callback(hObject, eventdata, handles) 

function edit2_Callback(hObject, eventdata, handles) 

function pushbutton1_Callback(hObject, eventdata, handles) 
 f1 = str2double(get(handles.edit1,'string')); 
 f2 = str2double(get(handles.edit2,'string')); 
 f3=f1+f2; 
 set(handles.edit3,'String',f3); 
这样就可以了



────────────────────────────────────────
  kernelcore (江南一书生)          于  (Fri May 26 20:15:46 2006)  说道:

最简单的方法用全局变量,当年我也碰到过类似问题,不过解决方法好像有三种,西较大
有本书上说的,有一个专门的函数供用户函数间传递值得,自己好好研究把,有些东西自
己不经历是学不到什么的,呵呵
【 在 zealotxbq (雪崩光电二极管) 的大作中提到: 】
:  
:  现有一Interface上有三个Edittext,(Tag=edit1,edit2,edit3) 
:  以及一个Push Button,(Tag=pushbutton1),
:  我在三个edittext和Push Button的callback函数里分别键入以下内容:
:  
:  function edit1_Callback(hObject, eventdata, handles)
:  f1 = str2double(get(hObject,'string'));
:  function edit2_Callback(hObject, eventdata, handles)
: ...................





────────────────────────────────────────
  zealotxbq (雪崩光电二极管)       于  (Fri May 26 20:44:30 2006)  说道:


【 在 each (each) 的大作中提到: 】
: 问题是f1和f2在 pushbutton1中是无效的,这种数据可以同过UserData进行传输,例..
: edit1_Callback中加入set(h0object,'UserData',f1),然后在pushbutton1_Callbac..
: 入f1=get(handles.edit1,'UserData'),f2也可以同过这种方法传输。
: 或者也可以干脆将edit1_Callback和edit2_Callback中的语句删除,添加到pushbutt..
: Callback中,写成发f1=str2double(get(handles.edit1,'String'));f2=str2doubl..
: t(handles.edit2,'String'));不过这个我还没试过,估计应该好使

 确实有效!多谢!




────────────────────────────────────────
  zealotxbq (雪崩光电二极管)       于  (Fri May 26 20:46:26 2006)  说道:


【 在 zjliu (秋天的萝卜) 的大作中提到: 】
: 看看下面的代码
: close all;
: E1=uicontrol(gcf,'style','edit',... 
:   'unit','normalized','position',[0.06,0.86,0.21,0.07],... 
:   'BackgroundColor',0.7*[1,1,1],'ForegroundColor',[0.9,0.1,0.2],... 
:   'string','121','fontsize',12,'fontname','times new roman');
: E2=uicontrol(gcf,'style','edit',... 
:   'unit','normalized','position',[0.06,0.66,0.21,0.07],... 
: ...................

 证实有效,但是,这样写好象不利于修改吧?再次调用也不方便啊 师兄




────────────────────────────────────────
  zjliu (秋天的萝卜)               于  (Fri May 26 20:47:33 2006)  说道:

我习惯m文件写GUI,被调用的另写文件
【 在 zealotxbq (雪崩光电二极管) 的大作中提到: 】
:  证实有效,但是,这样写好象不利于修改吧?再次调用也不方便啊 师兄




────────────────────────────────────────
  zealotxbq (雪崩光电二极管)       于  (Fri May 26 20:52:15 2006)  说道:


【 在 friendchj (春夏秋冬) 的大作中提到: 】
: function edit1_Callback(hObject, eventdata, handles) 
: function edit2_Callback(hObject, eventdata, handles) 
: function pushbutton1_Callback(hObject, eventdata, handles) 
:  f1 = str2double(get(handles.edit1,'string')); 
:  f2 = str2double(get(handles.edit2,'string')); 
:  f3=f1+f2; 
:  set(handles.edit3,'String',f3); 
: 这样就可以了

 这个我比较喜欢,谢谢!




────────────────────────────────────────
  lookfor (px)                     于  (Fri May 26 21:43:44 2006)  说道:


【 在 zealotxbq (雪崩光电二极管) 的大作中提到: 】
:  
:  现有一Interface上有三个Edittext,(Tag=edit1,edit2,edit3) 
:  以及一个Push Button,(Tag=pushbutton1),
:  我在三个edittext和Push Button的callback函数里分别键入以下内容:
:  
:  function edit1_Callback(hObject, eventdata, handles)
:  f1 = str2double(get(hObject,'string'));
:  function edit2_Callback(hObject, eventdata, handles)
: ...................


其实你只要把用handles.f1 handles.f2 每个callback 后再有
guidata(hObject, handles);  handles.**本身就是结构数组 
你试一下


────────────────────────────────────────
  lawydp (杨士戎)                  于  (Fri May 26 22:59:29 2006)  说道:


【 在 lookfor (px) 的大作中提到: 】
: 其实你只要把用handles.f1 handles.f2 每个callback 后再有
: guidata(hObject, handles);  handles.**本身就是结构数组 
: 你试一下

我采用的也是这种方法


────────────────────────────────────────
  hahn (gemini&&sar)               于  (Sat May 27 16:40:12 2006)  说道:


【 在 zealotxbq (雪崩光电二极管) 的大作中提到: 】
:  
:  现有一Interface上有三个Edittext,(Tag=edit1,edit2,edit3) 
:  以及一个Push Button,(Tag=pushbutton1),
:  我在三个edittext和Push Button的callback函数里分别键入以下内容:
:  
:  function edit1_Callback(hObject, eventdata, handles)
:  f1 = str2double(get(hObject,'string'));
:  function edit2_Callback(hObject, eventdata, handles)
: ...................


   我极力推荐用m函数自己写gui,matlab的图形方式不是很直接
   但是自己写图形定位很麻烦,需要设计布局,算坐标 
   具体的参考程序可参见 薛定宇在matlab大观园里几个他在德国工作时写的  
   关于矩阵图形化处理的toolboxes

   赞,zjliu写的就很好啊。



────────────────────────────────────────
  feifeifool (爱芳)                于  (Sat May 27 16:51:13 2006)  说道:

为什么这么多人喜欢 用matlab来做界面?感觉真正用的多的还是vc、vb
【 在 hahn (gemini&&sar) 的大作中提到: 】
:    我极力推荐用m函数自己写gui,matlab的图形方式不是很直接
:    但是自己写图形定位很麻烦,需要设计布局,算坐标 
:    具体的参考程序可参见 薛定宇在matlab大观园里几个他在德国工作时写的  
: ...................



────────────────────────────────────────
  hahn (gemini&&sar)               于  (Sat May 27 16:57:40 2006)  说道:


【 在 feifeifool (爱芳) 的大作中提到: 】
: 为什么这么多人喜欢 用matlab来做界面?感觉真正用的多的还是vc、vb


 作应用当然用VB,VC,
 这里只是仿真界面,
 目的是为理论和实验的数据仿真分析提供良好的人机交互
 界面是次,仿真为主。

 如果用matlab做内核,vc vb做调用界面也可以,
 使用dll,Active X或Mex matlab Engine
 但很麻烦

 各为其用吧,呵呵


────────────────────────────────────────
  feifeifool (爱芳)                于  (Sat May 27 16:59:20 2006)  说道:

哦,终于弄明白了,可惜我一直不做仿真界面,以后可以考虑学一下。
【 在 hahn (gemini&&sar) 的大作中提到: 】
:  作应用当然用VB,VC,
:  这里只是仿真界面,
:  目的是为理论和实验的数据仿真分析提供良好的人机交互
: ...................



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