Matlab GUI基础



  • 各种设置对话框

    文件打开对话框(uigetfile)

    文件保存对话框 (uiputfile)
    [FileName,PathName] = uigetfile(FilterSpec,’DialogTitle’,’DefaultName’)
    [FileName,PathName] = uigetfile(‘.m’,’选择m文件’,’li1.m’,’MultiSelect’,’on’);
    0_1551160833625_360117dd-e809-4b0c-ba5d-04642f5ad6a4-图片.png
    (‘MultiSelect’,on/off设置是否可以多选)
    (返回文件类型索引值,若为.jpg,第二个,则索引值为2)
    [FileName,PathName,FilterIndex] =uigetfile({‘
    .bmp’;’.jpg’,’.gif’},’选择图片’))

    颜色设置对话框(uisetcolor)

    C =uisecolor([0 0 1],’所选默认颜色’)

    字体设置对话框(uisetfont)

    A = uisefont(h,’DialogTitle’) 给h设置字体
    A = uisefont(S,’DialogTitle’) A是一个结构数组 S是默认字体的结构数组

    进度条

    更新进度:waitbar(x,h,’输入提示语句’)
    弄出取消按钮:waitbar(x,h,’输入提示语句’,’CreateCancelBtn’,’点击后执行的语句’)
    0_1551160850110_7b793131-eee1-4607-9e3c-f3e7171e1eec-图片.png
    0_1551160859954_e49327ea-f4a6-433a-81c8-b0fa30f5ef39-图片.png

    普通对话框Dialog

    0_1551160881337_77ac735e-def7-423b-b85e-e2b68aea81e5-图片.png
    uicontrol('Style','text’)
    不加text默认为按钮
    单位:像素pixar
    若无子对象,单击窗口使其关闭。

    选择对话框

    0_1551161122533_801e5052-062c-49a5-aa67-a1d766850037-图片.png

    错误对话框Errordlg

    Findall可找多层包括隐藏
    Findobj只找一层
    Find常用Tag Type
    找图时候直接find type image
    插入图要用32x32像素
    0_1551160890740_80f8a3b9-9877-419f-b476-2238f71a19ad-图片.png
    0_1551160904564_fe9a0927-8437-4d10-8438-65aceade3624-图片.png

    警告对话框Warndlg

    0_1551160911776_d05adba8-73bb-4176-ac2e-edefa5691591-图片.png

    帮助对话框Helpdlg

    0_1551160917895_224986ac-22f0-4b3b-8aed-762050468315-图片.png

    提问对话框Questdlg

    练习

    0_1551161057871_5f9619a4-f855-4f29-a2b5-df206ea96a5a-图片.png 0_1551161061897_531b5d83-ed87-4215-8ef7-f16804788c2c-图片.png 0_1551161065457_1f1b2400-4bd8-4d73-800a-fd4b16de69dd-图片.png

    进度条修饰

    0_1551161071318_ba1627ea-ad30-4753-89fb-dc364c3d25ba-图片.png

    更改警告图形

    0_1551161162482_72080da7-ddb3-4e1b-9107-b2cd59e9b5db-图片.png



  • Figure对象中的回调函数

    CreatFcn:在Figure被创建时的回调函数。
    DeleteFcn:在Figure被删除时的回调函数。
    CloseRequestFcn:在Figure在关闭请求时的回调函数。
    ResizeFcn:在Figure被改变大小时的回调函数。
    ButtonDownFcn:在Figure对象上点击鼠标回调函数。
    注:set(h,'SelectionType',’Value’) 设置点击类型
    normal---单击鼠标左键
    extend---按住shift的同时单击鼠标左键,或左右键同时按
    alternate---按住ctrl的同时单击鼠标左键,或单击右键
    open---双击

    KeyPressFcn:在Figure对象上按键回调函数。
    KeyReleaseFcn:在Figure对象上松开按键回调函数。

    Uicontrol控件类型

    (1) 触控按钮(pushbutton)
    (2) 切换按钮(togglebutton)
    (3) 列表框(listbox)
    (4) 下拉菜单(popupmenu)
    (5) 复选框(checkbox)
    (6) 单选按钮(radiobutton)
    (7) 滑动条(slider)
    (8) 静态文本(text)
    (9) 可编辑文本(edit)
    (10) 框架(frame)

    Uicontrol对象的属性

    设置回调函数的方式

    如何设置回调函数 如何定义回调函数
    set(h, 'StartFcn', 'myfile') function myfile
    set(h, 'StartFcn', @myfile) function myfile(obj, event)
    set(h, 'StartFcn', {'myfile', var1, var2, ...}) function myfile(obj, event, arg1, arg2, ...)
    set(h, 'StartFcn', {@myfile, var1, var2, ...}) function myfile(obj, event, arg1, arg2, ...)

    1、第一种情况:字符串,不需要向回调函数传递任何参数
    2、第二种情况:句柄,向回调函数传入调用回调函数的对象的句柄以及event(matlab留待以后使用)的值。
    3、第三、四种情况:向回调函数传入调用回调函数的对象的句柄以及用户想要传递的参数(多个)。

    Matlab读写txt

    打开与关闭文件fopen

    返回文件句柄file_t = fopen('mytxt.txt','r');
    关闭文件:fclose(句柄)
    关不利索就:fclose(‘all’)

    'r' Open file for reading.
    'w' Open or create new file for writing. Discard existing contents, if any.
    'a' Open or create new file for writing. Append data to the end of the file.
    'r+' Open file for reading and writing.
    'w+' Open or create new file for reading and writing. Discard existing contents, if any.
    'a+' Open or create new file for reading and writing. Append data to the end of the file.
    'A' Open file for appending without automatic flushing of the current output buffer.
    'W' Open file for writing without automatic flushing of the current output buffer.

    读文件textscan和fscanf

    Txt含两列数据
    A = textscan(file_t,'%d %d');都放A里
    [C,D]= textscan(file_t,'%d %d');放在两个里
    textscan(file_t,'%d %d',’headline’,5);忽略五行标题

    使用textscan扫描字符串数据

    str_1 = 'The number is 1 2 3 4 5';
    %首先使用textscan获取第前14字符,读一次,并返回读最后一个的位置
    [str1,position1] = textscan(str_1,'%14c',1);
    %获取字符串度
    [temp1,temp2] = size(str_1);
    %读取面数字字符串
    str_2 = textscan(str_1(position1+1:temp2),'%9c',1);
    fscanf用来扫描文件的数据

    如果我有的东西不想读可以按下列方式跳过

    写文件fprintf

    想要格式化文件从头写在fopen里设置’w’
    写不进去要看看是不是fopen设置的只读‘r’
    %% 每写入换行或插入想要字符
    file_1 = fopen('text_w.txt','w');
    %\r车符 \n换行符 必须车换行连用
    fprintf(file_1,'%d\r\n',[32;34]);
    %每写入数字加空格,列按列输
    temp = randint(4,2);
    fprintf(file_1,'%d ',temp);



  • Guide的使用

    用Guidata更新数据

    若一个控件的回调函数新添加了一个handles.a=5
    在没有Guidata(hObject,handles)时,在其他回调函数中利用此数据时会报错。
    因此要在声明handles.a=5后加上此句。
    H1=Guidata(h)可将h中的数据储存在H1中.

    1. Get a copy of the data with the command data= guidata(object_handle).
    2. Make the desired changes to data.
    3. Save the changed version of data withthe command guidata(object_handle,data).

    用Userdata和Value传递数据

    Userdata什么都可以装,Value只能装数。

    中断的使用

    在一个回调函数的while中,若没有中断,另一个按键的回调函数不会进行。
    Drawnow 可跳出循环 更新一下图形。
    Waitfor(h) 在h被关闭后向下执行,Waitfor(h,’propertyname’)在子对象变化时Waitfor(h,’propertyname’ ,’propertyvalue’)在子对象值变为某一定值时继续。
    Pause(n) 暂停n sec。
    Getframe 存取图像,与movie(H,n)配合使用。



  • 再补充一篇关于MATLAB的数值运算的内容

    求反函数finverse

    0_1551161466342_2405b74e-0452-4cfb-adb4-68cab907bf89-图片.png

    求复合函数compose

    0_1551161473320_f8035da0-7a82-49f4-88a7-6445a2310eff-图片.png
    0_1551161480731_9f69d1a3-9f83-4041-9710-4c6fff2e38a7-图片.png

    求微分diff

    0_1551161485705_7b0c85ae-b7d9-41cd-9205-fe6860015ec6-图片.png
    0_1551161491248_10509d37-1aca-4c98-ab9d-e9929d446f11-图片.png

    求极限limit

    ① 默认求X→0极限
    0_1551161507028_887c9e6f-230d-4d9a-b37d-e8fadb584c9c-图片.png
    0_1551161514998_b97564eb-8386-47fe-8be2-099021e35bba-图片.png
    ② 求无穷大极限

    0_1551161528118_d4a65f98-310c-4954-bd05-0bbd17bd7f1f-图片.png
    0_1551161536456_f44eae5a-bc41-423e-90dd-9ed28f15871e-图片.png

    求不定积分

    syms x a
    I1=int(1/sqrt(x^2+a^2));
    F1=simple(I1);
    I2=int(1/sqrt(x^2-a^2));
    F2=simple(I2);
    F=[F1;F2];

    F =

    log(x + (a^2 + x^2)^(1/2))
    log(x + (x^2 - a^2)^(1/2))

    解方程组

    syms x y
    [x,y]= solve('x^2+xy+y=3','x^2-4x+3=0');
    solution=[x,y]

    solution =

    [ 1, 1]
    [ 3, -3/2]

    解超越方程组

    syms x y
    S = solve('sin(x+y)-exp(x)*y=0','x^2-y=2');

    S =
    x: [1x1 sym]
    y: [1x1 sym]

    S.x
    ans =
    -0.66870120500236202933135901833637

    S.y
    ans =
    -1.5528386984283889912797441811191

    求微分方程的通解

    syms x a
    S1=dsolve('Dx=-ax');
    S2=dsolve('Dx=-a
    x','x(0)=1');
    solution=[S1;S2];

    solution =

    C2exp(-at)
    exp(-a*t)
    0_1551161555092_31bdbb84-ab8f-4195-825c-3f015d0c693b-图片.png 0_1551161559541_4e128bab-daf9-4c57-a5e8-6a3a2c056217-图片.png



  • 我想来补充一下GUIDE中Callback的使用。

    将UI和图形组件的特性与特定的回调函数相关联。

    其中每个属性对应于一项特定的用户操作。例如,某个uicontrol 包含名为 Callback的属性。可以将此属性的值设为某个回调函数或匿名函数的句柄,或包含 MATLAB表达式的字符向量。通过设置此属性,你的 App 可在用户与该 uicontrol交互时做出响应。如果Callback 属性没有指定值,则当用户与该uicontrol交互时不会发生任何操作。

    GUIDE 如何管理回调函数和属性

    在将 uicontroluimenuuicontextmenu 组件添加到 UI 之后,但在保存 UI 之前,GUIDE 会使用值 %automatic来填充Callback 属性。此值指示 GUIDE 将为回调函数生成名称。

    在保存 UI 时,GUIDE 将在你的代码文件中添加一个空的回调函数定义,并将控件的 Callback 属性设为匿名函数。以下函数定义是 GUIDE 为一个按钮生成的回调函数示例。

    function pushbutton1_Callback(hObject,eventdata,handles)
        % hObject    handle to pushbutton1 (see GCBO)
        % eventdata  reserved - to be defined in a future version of MATLAB
        % handles    structure with handles and user data (see GUIDATA)
    end
    

    GUIDE 回调语法

    所有回调必须接受至少三个输入参数:

    • hObject - 触发回调的 UI 组件。

    • eventdata - 包含关于特定鼠标或键盘操作的详细信息的变量。

    • handles - 包含 UI 中所有对象的 struct。GUIDE 使用 guidata 函数存储和维护此结构体。

    要使回调函数接受更多参数,必须在函数定义中的参数列表末尾放置更多参数。

    eventdata 参数
    eventdata 参数为某些回调函数提供详细信息。例如,如果最终用户触发了 KeyPressFcn,则 MATLAB 将会提供关于最终用户所按的特定键(或组合键)的信息。如果 eventdata 不可用于回调函数,则 MATLAB 会将其作为空数组传递。

    重命名和删除 GUIDE 生成的回调

    重命名回调
    GUIDE 通过组合组件的 Tag 属性和回调属性名称,创建回调函数的名称。如果更改了组件的 Tag 值,则 GUIDE 将会在下次保存 GUI 时更改回调的名称。

    如果决定在保存 GUI 之后更改 Tag 值,则 GUIDE 将会更新以下项(假定所有组件都具有唯一的 Tag 值)。

    • 组件的回调函数定义

    • 组件的回调属性值

    • 代码文件中对 handles 结构体内相应字段的引用

    要重命名回调函数而不更改组件的 Tag 属性,请执行以下操作:

    1. 在回调函数定义中更改名称。

    2. 通过更改传递到匿名参数的第一个参数来更新组件的回调属性。例如,某个按钮的原始回调属性可能类似以下所示:

    @(hObject,eventdata)myui('pushbutton1_Callback',...
                              hObject,eventdata,guidata(hObject))
    

    在此示例中,必须将 'pushbutton1_Callback' 更改为新的函数名称。

    1. 在代码文件中,将对旧函数名称的其他所有引用更改为新函数名称。

    删除回调
    当你想要删除或更改在最终用户执行特定操作时执行的函数,可以删除回调函数。要删除回调函数,请执行以下操作:

    1. 搜索并替换代码中所有引用该回调函数的实例

    2. 在 GUIDE 中打开 UI,并在属性检查器中替换所有引用该回调函数的实例。

    3. 删除回调函数。



  • 大二做信号与系统的时候拿matlab做了个五子棋的游戏,也是用的GUI
    不过这个东西应用场景真的好少吧。。。
    做起来其实也蛮简单的,有图形化的设计向导,只用在按钮或是点击事件对应的回调函数里写一些逻辑就能完成,matlab能自动帮你生成很长的其余代码,但是不管怎么说功能和图形设计都很有限
    最蛋疼的是,matlab提供了一个将你的程序打包成安装包的功能,可以把程序打包,形成可安装文件,看起来很方便,在任何windows电脑上都会展开安装向导,看起来也很高级
    问题在于,一个2、3M的小程序,必须要在线下载安装几百兆的Matlab runtime,而且是特定的版本,这就让这玩意儿非常鸡肋了


 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

Looks like your connection to Dian was lost, please wait while we try to reconnect.