您的位置:

Matlab GUI界面设计教程

一、Matlab GUI界面设计书籍

Matlab是一个在科学计算领域广泛应用的高级工具。在Matlab中,GUI可以让用户用鼠标和键盘来控制程序的交互。Matlab提供了很多GUI工具用于界面设计,如GUIDE、App Designer等,同时也有很多GUI界面设计书籍,我们可以从中学习GUI界面设计的各种方法和技巧。

介绍一些经典的Matlab GUI界面设计书籍:

  • 《Matlab GUI编程详解》:本书分为十一章,深入浅出地介绍了Gui设计的思路、方法与技巧。从这里可以获得GUI设计的基本框架和概念。
  • 《Matlab GUI Design》:本书全面介绍了Matlab GUI设计的相关知识,包括界面设计、图形、软件工程、数据处理等方面,可以帮助读者提高Matlab和GUI设计的水平。
  • 《Matlab数学和科学计算实践》:本书主要介绍Matlab在数学和科学计算中的应用,并以GUI为主题,丰富的具体示例实现了实用的科学计算功能,是一本非常全面的Matlab教程。

二、Matlab GUI界面设计

Matlab Gui的设计,主要包括控件的布局、调整、事件响应等。其中控件的布局是设计Gui界面的核心。Matlab提供了许多可用的控件,例如静态文本、按钮、文本框、列表框、下拉列表框、滑块等等。通过这些控件,我们可以快速且灵活地设计出一个Gui界面。下面是一个简单的Matlab Gui界面,用于计算两个数相加:

function calculator()

f = figure('Visible','off',...
           'Position',[360,500,450,285],...
           'MenuBar','none',...
           'NumberTitle','off',...
           'Name','Calculator');
       
h1 = uicontrol('Style','text',...
              'String','Input two numbers',...
              'BackgroundColor',get(f,'Color'),...
              'FontSize',12,...
              'Position',[130,245,190,23]);

h2 = uicontrol('Style','edit',...
              'BackgroundColor','white',...
              'String','0',...
              'Position',[140,200,100,23],...
              'Callback',@edit1_Callback);

h3 = uicontrol('Style','edit',...
              'BackgroundColor','white',...
              'String','0',...
              'Position',[250,200,100,23],...
              'Callback',@edit2_Callback);

h4 = uicontrol('Style','text',...
              'String','+',...
              'BackgroundColor',get(f,'Color'),...
              'FontSize',14,...
              'FontWeight','bold',...
              'Position',[165,150,60,30]);

h5 = uicontrol('Style','pushbutton',...
              'String','=',...
              'Position',[250,150,100,30],...
              'FontSize',12,...
              'Callback',@pushbutton_Callback);

h6 = uicontrol('Style','text',...
              'String','Result',...
              'BackgroundColor',get(f,'Color'),...
              'FontSize',12,...
              'Position',[130,100,60,23]);

h7 = uicontrol('Style','text',...
              'BackgroundColor','white',...
              'String','0',...
              'FontSize',12,...
              'Position',[200,100,100,23]);

set(f,'Visible','on');

    function edit1_Callback(hObject, ~)
        string_value1 = get(hObject,'String');
        value1 = str2double(string_value1);
    end

    function edit2_Callback(hObject, ~)
        string_value2 = get(hObject,'String');
        value2 = str2double(string_value2);
    end

    function pushbutton_Callback(~, ~)
        result = value1 + value2;
        set(h7, 'String', num2str(result));
    end

end

上述代码中,主要使用了uicontrol和figure函数定义GUI界面的各种控件。uicontrol函数用于创建Gui控件,例如静态文本、文本框、按钮等。figure函数用于创建Gui窗口。

三、Matlab的Gui登录界面设计

Gui的登录界面是应用非常广泛的生产环境Gui,实现Gui登录界面具有良好的人机交互性,比较容易用于实际应用。以下是一段Matlab Gui登录界面设计的示例代码:

function login()
f = figure('Visible','off',...
           'Position',[200,200,400,200],...
           'MenuBar','none',...
           'NumberTitle','off',...
           'Name','Matlab GUI Login');

h1 = uicontrol('Style','text',...
              'String','Username:',...
              'FontSize',12,...
              'Position',[40,130,80,23]);

h2 = uicontrol('Style','edit',...
              'String','',...
              'Position',[130,130,200,23]);

h3 = uicontrol('Style','text',...
              'String','Password:',...
              'FontSize',12,...
              'Position',[40,90,80,23]);

h4 = uicontrol('Style','edit',...
              'String','',...
              'Position',[130,90,200,23],...
              'BackgroundColor',[1,1,1],...
              'Callback',@password_Callback);

h5 = uicontrol('Style','pushbutton',...
              'String','Login',...
              'Position',[40,30,90,30],...
              'FontSize',12,...
              'Callback',@login_Callback);

h6 = uicontrol('Style','pushbutton',...
              'String','Cancel',...
              'Position',[240,30,90,30],...
              'FontSize',12,...
              'Callback',@cancel_Callback);

movegui(f,'center')
set(f,'Visible','on')

    function password_Callback(hObject,~)
        password = get(hObject,'String');
    end

    function login_Callback(~,~)
        uiresume(f);
    end

    function cancel_Callback(~,~)
        uiresume(f);
    end

end

上述代码中,使用了uicontrol和figure函数创建Gui界面。在Gui界面中定义了用户名和密码的输入框,以及登陆、取消按钮,并通过设置Callback回调函数,对密码的输入进行验证。当用户输入正确的用户名和密码后,点击登陆按钮即可完成登陆操作。

四、Matlab GUI界面背景图

Matlab Gui可以设置背景图片,使界面更美观、实用化。背景图的设置可以使用axes函数与'image'属性值来实现。以下是一个Matlab Gui界面设置背景图片的代码示例:

function gui_background()

f = figure('Visible','off',...
           'Position',[200,200,400,200],...
           'MenuBar','none',...
           'NumberTitle','off',...
           'Name','Matlab GUI Background');

im = imread('background.jpg'); % 设置背景图

imsize = size(im);
ax = axes('Units','pixels',...
          'Position',[1,1,imsize(2),imsize(1)]);
imagesc(im);

h = uicontrol('Style','pushbutton',...
              'String','Push Button',...
              'Position',[150,60,100,30]);

movegui(f,'center')
set(f,'Visible','on')

end

上述代码中,使用image函数设置了背景图片,并在其中添加了一个按钮控件,使界面不只是一个简单的静态图片。

五、Matlab Gui设计登录界面切换

在Gui的设计界面上实现界面的切换,在Gui中常常会用到制表符或多面板来实现。制表符可以让不同的标签/界面有很好的组织和整理,多面板让界面的切换体验更加好。下面是一段Matlab GUI设计例子,通过多面板实现登录界面和主界面的切换:

function login_ui()
% 创建figure和两个panel:登陆panel和主面版panel

f = figure('Visible','off',...
           'Position',[200,200,400,400],...
           'MenuBar','none',...
           'NumberTitle','off',...
           'Name','Matlab GUI Panel');

login_panel = uipanel('Parent',f,...
                      'Units','Normalized',...
                      'Position',[0, 0.2, 1, 0.8],...
                      'Visible','on');
                 
main_panel = uipanel('Parent',f,...
                     'Units','Normalized',...
                     'Position',[0, 0.2, 1, 0.8],...
                     'Visible','off');
                 
% 设置登陆panel中的控件
 
uicontrol('Parent',login_panel,...
          'Style','text',...
          'String','Username:',...
          'FontSize',12,...
          'Position',[40,130,80,23]);
h2 = uicontrol('Parent',login_panel,...
              'Style','edit',...
              'String','',...
              'Position',[130,130,200,23]);
       
uicontrol('Parent',login_panel,...
          'Style','text',...
          'String','Password:',...
          'FontSize',12,...
          'Position',[40,90,80,23]);
h4 = uicontrol('Parent',login_panel,...
              'Style','edit',...
              'String','',...
              'Position',[130,90,200,23],...
              'BackgroundColor',[1,1,1],...
              'Callback',@password_Callback);

uicontrol('Parent',login_panel,...
          'Style','pushbutton',...
          'String','Login',...
          'Position',[40,30,90,30],...
          'FontSize',12,...
          'Callback',@login_Callback);

uicontrol('Parent',login_panel,...
          'Style','pushbutton',...
          'String','Cancel',...
          'Position',[240,30,90,30],...
          'FontSize',12,...
          'Callback',@cancel_Callback);

% 设置主页面panel中的控件
          
uicontrol('Parent',main_panel,...
          'Style','pushbutton',...
          'String','Logout',...
          'Position',[40,30,90,30]);

h = uicontrol('Parent',main_panel,...
              'Style','pushbutton',...
              'String','Push Button',...
              'Position',[150,60,100,30]);

% 切换界面的回调函数
    function password_Callback(hObject,~)
        password = get(hObject,'String');
    end

    function login_Callback(~,~)
        set(login_panel,'Visible','off');
        set(main_panel,'Visible','on');
    end

    function cancel_Callback(~,~)
        uiresume(f);
    end

end

上述代码中,使用了uipanel函数创建了两个面板,一个用于创建登录界面,一个用于创建主界面。在登录界面中,我们定义了一个”取消“、”登录“按钮和用户名和密码的输入框,当用户输入正确的用户名和密码后,点击登录按钮将切换到主界面。

六、Matlab Gui设计实例

下面是一个更加完整、实用的Matlab GUI设计实例,包括输入输出模块,声音处理模块,以及控制参数模块。这个Gui设计可以用于简单的语音处理任务,例如噪声去除和语音分割操作。

function speech_gui
f = figure('Visible','off',...
           'Position',[200,200,520,600],...
           'MenuBar','none',...
           'NumberTitle','off',...
           'Name','Speech Processing GUI');

h1 = uicontrol('Style', 'text', ...
              'String', 'Speech Processing GUI', ...
              'FontSize', 14, ...
              'ForegroundColor', 'blue', ...
              'BackgroundColor','white',...
              'HorizontalAlignment', 'center', ...
              'Position',[120,550,300,30]);

panel_input = uipanel('Parent',f,...
                      'Units','Normalized',...
                      'Position',[0.05, 0.65, 0.9, 0.28],...  
                      'Title','Input Module',...
                      'BackgroundColor','white');
                 
panel_output = uipanel('Parent',f,...
                      'Units','Normalized',...
                      'Position',[0.05, 0.2, 0.9, 0.4],...
                      'Title','Output Module',...
                      'BackgroundColor','white');
                 
% 设定输入模块
uicontrol('Parent',panel_input,...
          'Style','text',...
          'String','Input File:',...
          'FontSize',10,...
          'FontWeight','bold',...
          'Position',[20,70,60,20]);

uicontrol('Parent',panel_input,...
          'Style','edit',...
          'BackgroundColor','white',...
          'String','test.wav',...
          '