MATLAB GUI设计(1)

时间:2023-03-09 19:36:58
MATLAB GUI设计(1)

一、新建GUI

1、命令行窗口输入 guide会出来如下界面,可以新建空白GUI,也可以打开已有GUI

MATLAB GUI设计(1)

2、通过工具栏新建

MATLAB GUI设计(1)

二、数据传递例子

1、添加输入框按钮,设置尺寸大小,内容,格式,标签

MATLAB GUI设计(1)

2、复制输入框按钮,得到输出框按钮

MATLAB GUI设计(1)

3、转换按钮

(1)添加按钮

MATLAB GUI设计(1)

注意格式是pushbutton

(2)添加回调函数

MATLAB GUI设计(1)

MATLAB GUI设计(1)

(3)运行

MATLAB GUI设计(1)

3、界面可调

MATLAB GUI设计(1)

MATLAB GUI设计(1)

MATLAB GUI设计(1)

4、滚动条

(1)插入滑动条,设置

MATLAB GUI设计(1)

(2)静态文本框

MATLAB GUI设计(1)

(3)可编辑文本

MATLAB GUI设计(1)

(4)回调函数

打开滑动条的回调函数

function slider1_Callback(hObject, eventdata, handles)
% hObject handle to slider1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
val=get(handles.slider1,'Value');%得到slider1,属性为‘Value’的值
set(handles.edit1,'String',num2str(val));%设置edit1属性为‘String’的值

加上最后两句,即可。  

MATLAB GUI设计(1)

4、单选按钮

(1)添加单选按钮,设置

MATLAB GUI设计(1)

选择了该按钮,'Value'值为最大值,否则为最小值

(2)添加可编辑文本

MATLAB GUI设计(1)

(3)添加回调函数

function radiobutton1_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
val=get(handles.radiobutton1,'Value');%得到slider1,属性为‘Value’的值
set(handles.edit1,'String',num2str(val));%设置edit1属性为‘Strin
% Hint: get(hObject,'Value') returns toggle state of radiobutton1

MATLAB GUI设计(1)

MATLAB GUI设计(1)

(5)更改最大最小值及设置

MATLAB GUI设计(1)

MATLAB GUI设计(1)

MATLAB GUI设计(1)

5、复选框

(1)添加复选框,设置

MATLAB GUI设计(1)

(2)添加可编辑文本框(如上)

(3)回调函数

function checkbox1_Callback(hObject, eventdata, handles)
% hObject handle to checkbox1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
val=get(handles.checkbox1,'Value');%得到slider1,属性为‘Value’的值
set(handles.edit2,'String',num2str(val));%设置edit1属性为‘Strin
% Hint: get(hObject,'Value') returns toggle state of checkbox1

MATLAB GUI设计(1)

MATLAB GUI设计(1)

6、切换函数

(1)添加切换按钮

MATLAB GUI设计(1)

(2)添加文本框

(3)添加回调函数

function togglebutton2_Callback(hObject, eventdata, handles)
% hObject handle to togglebutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
val=get(handles.togglebutton2,'Value');%得到slider1,属性为‘Value’的值
set(handles.edit3,'String',num2str(val));%设置edit1属性为‘Strin
% Hint: get(hObject,'Value') returns toggle state of togglebutton2

 MATLAB GUI设计(1)

MATLAB GUI设计(1)

7、按钮组

(1)添加按钮组控件,设置显示文字及大小

MATLAB GUI设计(1)

(2)添加三个单选按钮,更改显示内容和大小

MATLAB GUI设计(1)

运行一下,如下图

MATLAB GUI设计(1)

同一时刻只能选择一个按钮,这就是按钮组的特点

(3)添加坐标轴

MATLAB GUI设计(1)

(4)添加SelectionChangedFcn函数

MATLAB GUI设计(1)

function uibuttongroup1_SelectionChangedFcn(hObject, eventdata, handles)
% hObject handle to the selected object in uibuttongroup1
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x=0:0.01:2*pi;%定义x轴坐标
axes(handles.axes1);%选中你要画图的坐标系
current_selection=get(eventdata.NewValue,'tag'); %困扰了一天的问题终于解决了
%原来 是Tag 返回值是字符串类型
% case后的选择条件要加引号
switch current_selection
case 'radiobutton1'
y1=sin(x);
plot(x,y1);
grid on
title('sin(x)')
case 'radiobutton2'
y2=cos(x);
plot(x,y2);
grid on
title('cos(x)')
case 'radiobutton3'
y3=sin(x)+cos(x);
plot(x,y3);
grid on
title('sin(x)+cos(x)')
end

MATLAB GUI设计(1)

MATLAB GUI设计(1)

8、弹出式菜单

(1)添加弹出式菜单

MATLAB GUI设计(1)

Value 随着选择不同分别为1,2,3

MATLAB GUI设计(1)

MATLAB GUI设计(1)

(2)添加回掉函数

function popupmenu1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
val=get(handles.popupmenu1,'Value')%不加分号,将结果显示

选择不同的函数,返回不同的值

MATLAB GUI设计(1)

(3)添加坐标轴

(4)添加回调函数

function popupmenu1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
val=get(handles.popupmenu1,'Value');
x=0:0.01:2*pi;%定义x轴坐标
axes(handles.axes1);%选中你要画图的坐标系
switch val
case 1
y1=sin(x);
plot(x,y1);
grid on
title('sin(x)')
case 2
y2=cos(x);
plot(x,y2);
grid on
title('cos(x)')
case 3
y3=sin(x)+cos(x);
handles.h=plot(x,y3);%创建句柄
set(handles.h,'Color',rand(1,3));%设置颜色 title('sin(x)+cos(x)')
end

MATLAB GUI设计(1)

MATLAB GUI设计(1)

MATLAB GUI设计(1)

9、listbox控件

(1)创建listbox控件

MATLAB GUI设计(1)

Value的值和list内容一一对应。

(2)添加按钮

MATLAB GUI设计(1)

(3)添加可编辑文本

MATLAB GUI设计(1)

(4)按钮函数添加回调函数

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)
str=get(handles.listbox1,'String');%得到listbox1中String中的字符串,列表格式
index_x=get(handles.listbox1,'Value');%列表的下标
set(handles.edit1,'String',str(index_x));%将字符串显示在可编辑文本框中

 y轴的回调函数同理。 

 MATLAB GUI设计(1)

(5)CreatFcn函数(listbox将参数函数化)

MATLAB GUI设计(1)

function listbox1_CreateFcn(hObject, eventdata, handles)
% hObject handle to listbox1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called % Hint: listbox controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
t=0:0.01:2*pi;
canshu1=t;
canshu2=sin(t);
canshu3=cos(t);
canshu4=sin(t)+cos(t);

 创建新的结构体,保存handles结构体

cl=[canshu1;canshu2;canshu3;canshu4];%创建新的结构体,注意一定使用分号,否则得到的是一串数字。或者使用元胞格式,但是注意调试数据获取方式
handles.cl=cl;
guidata(hObject,handles);%更新handles结构体

(6)回调函数中,选择的x,y轴参数赋值

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)
str=get(handles.listbox1,'String');%得到listbox1中String中的字符串,列表格式
index_x=get(handles.listbox1,'Value');%列表的下标
set(handles.edit1,'String',str(index_x));%将字符串显示在可编辑文本框中 x=handles.cl(index_x,:);%选择的x轴的数值
handles.x=x;%必须定义新的handles,否则没法传递到下一个函数
guidata(hObject,handles)

y轴同理

function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
str=get(handles.listbox1,'String');
index_y=get(handles.listbox1,'Value');
set(handles.edit2,'String',str(index_y));
y=handles.cl(index_y,:);
handles.y=y;
guidata(hObject,handles)

(7)创建绘图按钮和坐标轴,并且添加绘图按钮回调函数

MATLAB GUI设计(1) 

function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
axes(handles.axes2);%选中你要画图的坐标系
plot(handles.x,handles.y);
grid on
axis equal

MATLAB GUI设计(1)

元胞数组形式的全部程序

function varargout = list_1(varargin)
% LIST_1 MATLAB code for list_1.fig
% LIST_1, by itself, creates a new LIST_1 or raises the existing
% singleton*.
%
% H = LIST_1 returns the handle to a new LIST_1 or the handle to
% the existing singleton*.
%
% LIST_1('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in LIST_1.M with the given input arguments.
%
% LIST_1('Property','Value',...) creates a new LIST_1 or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before list_1_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to list_1_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help list_1 % Last Modified by GUIDE v2.5 23-Nov-2017 00:35:23 % Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @list_1_OpeningFcn, ...
'gui_OutputFcn', @list_1_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT % --- Executes just before list_1 is made visible.
function list_1_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to list_1 (see VARARGIN) % Choose default command line output for list_1
handles.output = hObject; % Update handles structure
guidata(hObject, handles); % UIWAIT makes list_1 wait for user response (see UIRESUME)
% uiwait(handles.figure1); % --- Outputs from this function are returned to the command line.
function varargout = list_1_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure
varargout{1} = handles.output; % --- Executes on selection change in listbox1.
function listbox1_Callback(hObject, eventdata, handles)
% hObject handle to listbox1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA) % Hints: contents = cellstr(get(hObject,'String')) returns listbox1 contents as cell array
% contents{get(hObject,'Value')} returns selected item from listbox1 % --- Executes during object creation, after setting all properties.
function listbox1_CreateFcn(hObject, eventdata, handles)
% hObject handle to listbox1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called % Hint: listbox controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end t=0:0.01:2*pi;
canshu1=t;
canshu2=sin(t);
canshu3=cos(t);
canshu4=sin(t)+cos(t); cl={canshu1,canshu2,canshu3,canshu4};%元胞数组创建新的结构体
handles.cl=cl;
guidata(hObject,handles)%更新handles结构体 % --- Executes on button press in pushbutton1.
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)
str=get(handles.listbox1,'String');%得到listbox1中String中的字符串,列表格式
index_x=get(handles.listbox1,'Value');%列表的下标
set(handles.edit1,'String',str(index_x));%将字符串显示在可编辑文本框中 x=handles.cl{index_x};%选择的x轴的数值
handles.x=x;%handles化
guidata(hObject,handles) % --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
str=get(handles.listbox1,'String');
index_y=get(handles.listbox1,'Value');
set(handles.edit2,'String',str(index_y));
y=handles.cl{index_y};%注意使用花括号
handles.y=y;%创建新的元胞数组传递数值
guidata(hObject,handles) function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit1 as text
% str2double(get(hObject,'String')) returns contents of edit1 as a double % --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end function edit2_Callback(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit2 as text
% str2double(get(hObject,'String')) returns contents of edit2 as a double % --- Executes during object creation, after setting all properties.
function edit2_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end % --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
axes(handles.axes2);%选中你要画图的坐标系
plot(handles.x,handles.y);
grid on
axis equal

注意整个实例是利用handles来传递全局变量。

字符的一开始参数化,编程很好的思想。

10、菜单编辑

(1)创建菜单编辑器

MATLAB GUI设计(1)

MATLAB GUI设计(1)

MATLAB GUI设计(1)

(2)创建坐标轴

(3)添加回调函数

function sin_x_Callback(hObject, eventdata, handles)
% hObject handle to sin_x (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x=0:0.01:2*pi;
axes(handles.axes1);
handles.h=plot(x,sin(x));%创建画图句柄
grid on
title('正弦曲线')
guidata(hObject,handles)%保存句柄 % --------------------------------------------------------------------
function cos_x_Callback(hObject, eventdata, handles)
% hObject handle to cos_x (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x=0:0.01:2*pi;
axes(handles.axes1);
handles.h=plot(x,cos(x));%创建画图句柄
grid on
title('余弦曲线')
guidata(hObject,handles)%保存句柄

MATLAB GUI设计(1)

MATLAB GUI设计(1)

(4)添加上下文菜单

MATLAB GUI设计(1)

更改坐标轴设置

MATLAB GUI设计(1)

MATLAB GUI设计(1)

(5)添加颜色、线宽回调函数

% --------------------------------------------------------------------
function red_Callback(hObject, eventdata, handles)
% hObject handle to red (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(handles.h,'color','red')%设置红色 % --------------------------------------------------------------------
function yellow_Callback(hObject, eventdata, handles)
% hObject handle to yellow (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(handles.h,'color','y') % --------------------------------------------------------------------
function grean_Callback(hObject, eventdata, handles)
% hObject handle to grean (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(handles.h,'color','g')
function linewidth_1_Callback(hObject, eventdata, handles)
% hObject handle to linewidth_1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(handles.h,'linewidth',2)%线宽 % --------------------------------------------------------------------
function linewidth_2_Callback(hObject, eventdata, handles)
% hObject handle to linewidth_2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(handles.h,'linewidth',4)%线宽

MATLAB GUI设计(1)

MATLAB GUI设计(1)