Matlab GUI 多窗口 编程总结

以一个实际例子中的代码为例: https://github.com/borninfreedom/robotics_arm/blob/master/RobotStudio/RobotStudio.m

第947行为例。

h = figure_yoshikawa;  %多窗口编程
h = guihandles(h);

 

创建好主窗口后,请仔细阅读主窗口开始几行的注释,如图:Matlab GUI 多窗口 编程总结_第1张图片

 

第一个箭头那表示可以使用这个获得这个窗口的句柄,第二个箭头表示是否允许多窗口编程,0就是允许。

然后使用GUIDE创建第二个窗口,在第二个窗口的空白部位Matlab GUI 多窗口 编程总结_第2张图片

就是没有空间的部位双击,打开当前窗口的属性。最重要的两个:Tag 和 Name。 Tag是我们获取句柄的索引名称,Name是窗口的标题。(有个例外,h = figure_yoshikawa;这句,子窗口的Tag就是figure_yoshikawa, 同时子窗口的Gui_Singleton设置为1,这样就可以获取到子窗口的句柄,但是对于主窗口是无效的,主窗口的Tag不管怎么设置,如果想在子窗口中获取主窗口的句柄,需要用主窗口的文件名,比如我的是 RobotStudio.m ,那么需要用  h = RobotStudio)

 

我设置子窗口的Tag为 figure_yoshikawa, 如果在一个Button的Callback里面写一句  h = figure_yoshikawa, 那么点击按钮,就会打开这个窗口,此时主窗口和子窗口并没有数据传递。

 

但是如果再加上一句 h = guihandles(h); 此时就可以把 h 当做 handles来用。比如说handles.text1指主窗口的text1,那么h.text1就是子窗口的text1.

Matlab GUI 多窗口 编程总结_第3张图片

就像这样,可以方便的进行父子窗口的数据传递。

 

同样,建议所有的全局变量用 handles.xxx = xxx来表示,尽量不要使用global。除去global的效率非常低下,global在多窗口的数据传递上是个短板,如果使用handles的话,在子窗口中使用 

h =  figure_main;

h = guidata(h);

handles.v = h.v;

就可以方便的把主窗口中的v变量拿到子窗口中来用。但是global就不怎么好用。 

你可能感兴趣的:(#,MATLAB)