GUIDE生成的GUI的M文件控制了你编制的GUI界面的所有属性和行为,或者说外观和对用户操作的响应。比如说按下一个按钮或者选择了一个菜单项之类。M文件包括了运行你整个界面程序所需要的全部代码,包括所有GUI组件的CALLBACKS函数。其实这些callbacks函数算是M文件里的子程序,callback里面就填写你所期望程序做的动作,比如画一个图或者算一个算式。
function varargout = setfire(varargin)
(setfire是我m文件存的名字)就是那个大程序框,它下面有很多小function 比如什么什么creatFcn或者什么callback之类。看上去那个复杂,其实就跟上面这个一样的道理。只不过是M文件的类似avg = mean(u, n);med = median(u, n);这两句话系统隐藏(就当它是隐藏好了)起来了,它会在你点击鼠标(或者响应操作)时候自动去调用执行一次callback函数。所以你只用管把代码写入响应的函数名下就行了。至于系统为什么会自动调用,我们不用管,我们只用知道,我点击鼠标,我拖动滑竿时,系统会执行哪里的代码。就够了。
----------------------------------------------------插入结束-----------------------------------------------
一 M文件的数据管理模式
-----------------------------------------------------------------
Sharing Data with the Handles Structure
用handles这个东西共享数据
在你运行你的GUI的时候,M文件会自动生成一个叫做handles的东西(准确的说它属于handles 类型的结构体,且取的名字也叫做handles),不用管那么复杂,只用知道你可以从它这里到GUI的所有数据,比如说控件的信息,菜单信息,axes信息。想象handles就是一个缸了,它里面装载了所有的信息,而且这个缸在各个控件的callback之间传来传去,理所当然那每个控件的callback都可以放入一些想放入的数据,也可以从里面取出任何想要的数据包括别的控件的信息(比如滑竿的当前值,edit text的当前值)和别的控件放进去的数据。
所以,用handles可以达到的目的有两个:
--------------
a,各个控件的callback的信息交换
------
(current_data是随便设置的变量名)
handles.current_data = X; 在某控件下的callback写入这一句,就表示你把这个数据放缸里了
guidata(hObject,handles);接着别忘了保存~!
然后在你需要的地方把它从缸里捞出来
    X1 = handles.current_data;
-------------
b,读取GUI控件的信息,自然也可以设置GUI控件的信息(比如说背景随着按钮点击而变换之类,或者你想让按钮A点一下,字符B跳一下,也行。)
------
    all_choices是随便取的变量名,my_menu是你那个菜单项的TAG名字
    all_choices = _menu, 'String');
    current_choice = all_choices{_menu, 'Value')};
这样current_choice就得到了用户界面操作中,目录或者菜单的选择结果。
所以,要什么信息,直接用handles.你的对象 就行了。
存什么信息也直接handles.你的对象  就行了。
如果是自己的数据,就.变量名;如果是控件信息,就用get set
待续;
二、M-File里的各个函数代表什么意思
在设计面板设计排列好自己需要的各种按钮或者编辑框之后,下一步任务便是添加自己的响应代码。
Opening function  添加在它名下的代码,在GUI开始运行但是还不可见的时候执行。这里的
代码一般都是做一些初始化工作的。字符串函数怎么获取
Output function  如果有需要,可以向命令行输出数据。(这个函数我没用过,不多说了^_^)
Callbacks 每一次点击按钮或者向输入框输入数据或者拖动滑竿,这些控件名下的callback就会执行一次。
---------------
函数的输入参数
M-File名下的全部function都会有这两个输入参数
hObject  它代表的是当前的这个控件(也就是你点哪一个按钮或者拖的哪一个滑竿)
handles  它代表的是现在这整一个GUI界面
对这两个变量进行修改后
guidata(hObject, handles); 进行保存,否则修改无效;
三、Opnning Function
这个函数名下的代码 在界面可见之前执行。其实你也可以在这个函数名下用handles.什么tag 来获得组件的信息。因为在Opnning函数之前,所有的组件就已经生成了,只不过openning函数是把这些组件‘打开’,让它们显示出来。所以你可以在这个函数下面,添加代码,对界面做一些初始化工作。比如,计算一些数据,显示一幅图或者别的什么工作。
function my_gui_OpeningFcn(hObject, eventdata, handles, varargin)
另外两个输入参数eventdata是matlab的保留参数,为以后开发准备的,我们不用管它。varargin 它里面保存了,传进来的命令行。
varargin怎么理解呢?
-------------
my_gui('Position', [71.8 44.9 74.8 19.7])
%GUI也是函数,它只不过是有个界面的函数。它的调用,同样是 函数名(输入参数)。
这里就表示GUI在打开时,位置这个属性被设置成了右边那个值。也就是在这个位置打开GUI。Position是你GUI界面的一个属性。(要想知道各个控件有什么属性,在它上面双击就看到了。)所以同样,也可以用这种方式输入其他的初始化命令。
my_gui('路人甲','年十八')
但如果你输入别的,左边那个根本就不是界面的属性名称。这是输入的参数就保存在varargin里面。也就是 vararging{1}='路人甲' vararging{2}='年十八'。
这样也可以达到向调用的GUI传入数据的目的。
四、Output Function
  Output function
--------------------
有输入自然就有输出,顾名思义,这个函数就是用来输出的。
function varargout = my_gui_OutputFcn(hObject, eventdata, handles)
% Get default command line output from handles structure
  varargout{1} = handles.output;
这个函数不是我们自己编写的,也不是我们负责调用。我们只用知道要传出去的数据,其实是放在vararout这个变量里面的。但是我们在别的控件的callback是叫不到vararout这个变量的,因为你去看这些callback的输入参数里并没有vararout这个变量给它用。所以我们只能间接修改handles.output这个变量。(当然在后面别忘了添加guidata(hObject, handles);保存修改)
因为默认的output函数里面varargout{1}=handles.output,也就是修改了vararout。
(所以知道了原理,output只是一个名字而已,你也可以用任意别的名字,或者添加更多的输出变量,只要在outputFcn下面添加 varargout{2}=handles.第二个变量名 。。。。类似)
guidata(hObject, handles)之后不要立即delete窗口命令,因为这时候outputfcn没有再执行一次,也就是你刚刚修改的output并没有更新到varargin里面去。
所以要么单独设计一个关闭按钮;要么跟uiwait(handles.figure1);uiresume合用。
五、Callbacks
回调函数
当你对组件做点击或者别的动作,则自动调用相应的callback。callback的名字取决于你的控件的tag和控件类型以及响应类型。
function print_button_Callback(hObject, eventdata, handles)
通用callback 写法
每一个控件都有自己的属性常规属性有:
        一、控件风格和外观
        (1)BackgroundColor:设置控件背景颜,使用[R G B]或颜定义。
        (2)CData:在控件上显示的真彩图像,使用矩阵表示。
        (3)ForegroundColor:文本颜。
        (4)String属性:控件上的文本,以及列表框和弹出菜单的选项。
        (5)Visible:控件是否可见。
        二、对象的常规信息
        (1)Enable属性: 表示此控件的使能状态,设置为on”,表示可选,为“off”时则表示不可选。
        (2)Style:控件对象类型。
        (3)Tag:控件表示(用户定义)。
        (4)TooltipString属性:提示信息显示。当鼠标指针位于此控件上时,显示提示信息。
        (5)UserData:用户指定数据。
        (6)Position:控件对象的尺寸和位置。
        (7)Units:设置控件的位置及大小的单位
        (8)有关字体的属性,如 FontAngle, FontName等。
        三、控件回调函数的执行
        (1)BusyAction:处理回调函数的中断。有两种选项:即Cancel:取消中断事件,queue:排队(默认设置)。
        (2)ButtonDownFcn属性:按钮按下时的处理函数。
        (3)CallBack属性:是连接程序界面整个程序系统的实质性功能的纽带。该属性值应
该为一个可以直接求值的字符串,在该对象被选中和改变时,系统将自动地对字符串进行求值。
        (4)CreateFcn:在对象产生过程中执行的回调函数。
        (5)DeleteFcn:删除对象过程中执行的回调函数。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。