看B站up主freexyn的freexyn编程实例视频教程系列36Matlab GUI的学习笔记
任务要求该闹铃/定时器可以设定时间、选择是否播放音乐
-
设计界面,使用了静态文本、可编辑文本、普通按钮、复选框
-
修改属性string,保存为alarm.fig
-
在设定时间右边的可编辑文本框中,运行时应该显示出当前的系统时间。设定时间时,在此基础上进行简单修改即可。
-
可编辑文本框的显示涉及string属性,但是不能在这个属性上写回调函数,因为他会处理成字符串原样输出在可编辑文本框中
-
此处涉及CreateFcn函数:在这个界面生成这个控件的时候运行该函数
function edit1_CreateFcn(hObject, eventdata, handles) %now是当前的系统时间,强制转换为datestr时间字符型,使用的是第31种时间格式 set(hObject,'string',datestr(now,31)); if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end
-
-
添加“定时”按钮的回调函数
function pushbutton2_Callback(hObject, eventdata, handles) %datenum()将日期和时间转换为日期序列值,方便比较大小 set_time=datenum(get(handles.edit1,'string')); %不断地获取当前时间和设定时间进行比较,当系统时间和设定时间一致时,退出循环并弹出提醒窗口 while 1 now_time=datenum(now); if set_time==now_time break; end end %helpdlg(msg)自定义消息文本,创建对话框 helpdlg('时间到了');
-
“播放音乐”复选框和“添加音乐”按钮
function checkbox1_Callback(hObject, eventdata, handles) v=get(hObject,'value');%value值代表是否勾选 if v==1 %勾选 set(handles.pushbutton1,'enable','on');%“添加音乐”按钮可用 else set(handles.pushbutton1,'enable','off');%“添加音乐”按钮不可用 end
但是目前初始化界面中,“播放音乐”默认未勾选,“添加音乐”按钮默认可用,会造成冲突
修改界面初始化函数alarm_OpeningFcn():
function alarm_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 alarm (see VARARGIN) % Choose default command line output for alarm handles.output = hObject; **%添加该行代码,默认“添加音乐”按钮不可用 set(handles.pushbutton1,'enable','off');** % Update handles structure guidata(hObject, handles); % UIWAIT makes alarm wait for user response (see UIRESUME) % uiwait(handles.figure1);
-
“添加音乐”按钮的回调函数:希望点击后跳出一个文件选择窗口,选择音乐文件
function pushbutton1_Callback(hObject, eventdata, handles) [file_name,file_path]=uigetfile('*.mp3'); set(hObject,'string',file_name); %userdata属性可储存控件的任何大小和类型的数据 %fullfile()可以将多个字符串拼接成文件路径 set(hObject,'userdata',fullfile(file_path,file_name));
然后把播放音乐的功能放到“定时”按钮中来,直接在“定时”按钮的回调函数添加
function pushbutton2_Callback(hObject, eventdata, handles) %datenum()将日期和时间转换为日期序列值,方便比较大小 set_time=datenum(get(handles.edit1,'string')); %不断地获取当前时间和设定时间进行比较 while 1 now_time=datenum(now); if set_time==now_time break; end end %helpdlg(msg)自定义消息文本,创建对话框 helpdlg('时间到了'); %添加以下 v=get(handles.checkbox1,'value');%value值代表是否勾选 if v==1 %勾选 music=get(handles.pushbutton1,'userdata');%读取“添加音乐”按钮的音乐文件 dos(music);%打开音乐( dos(command) 调用操作系统以执行指定的命令 ) end%没有勾选就不执行