【MATLAB GUI】 2. 设计一个闹铃/定时器(静态文本、可编辑文本、普通按钮、复选框)

看B站up主freexyn的freexyn编程实例视频教程系列36Matlab GUI的学习笔记

任务要求该闹铃/定时器可以设定时间、选择是否播放音乐

  1. 设计界面,使用了静态文本、可编辑文本、普通按钮、复选框

  2. 修改属性string,保存为alarm.fig

  3. 在设定时间右边的可编辑文本框中,运行时应该显示出当前的系统时间。设定时间时,在此基础上进行简单修改即可。

    1. 可编辑文本框的显示涉及string属性,但是不能在这个属性上写回调函数,因为他会处理成字符串原样输出在可编辑文本框中

    2. 此处涉及CreateFcn函数:在这个界面生成这个控件的时候运行该函数

      matlab 复制代码
      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
  4. 添加"定时"按钮的回调函数

    matlab 复制代码
    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('时间到了');
  5. "播放音乐"复选框和"添加音乐"按钮

    matlab 复制代码
    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():

    matlab 复制代码
    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);
  6. "添加音乐"按钮的回调函数:希望点击后跳出一个文件选择窗口,选择音乐文件

    matlab 复制代码
    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));

    然后把播放音乐的功能放到"定时"按钮中来,直接在"定时"按钮的回调函数添加

    matlab 复制代码
    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%没有勾选就不执行
相关推荐
凯哥Java13 小时前
写代码怎么避免逻辑漏洞?
java·开发语言·人工智能·自动化
火柴就是我13 小时前
Flutter 项目本地 Maven 引入 AAR 找不到?一次 Gradle 路径问题排查
android
火柴就是我13 小时前
Android 打包报错 25.0.3
android·前端
Ai-_Man13 小时前
您您这可以把Dola的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。用AI导出鸭,答案是可以的
开发语言·前端·人工智能·小程序
Java后端的Ai之路13 小时前
Python进阶探索23 - Python中的Time与Datetime模块
开发语言·数据库·python·datetime·time
码上有光14 小时前
Linux进程通信——共享内存、消息队列和信号量
android·linux·运维·共享内存·通信
沫璃染墨14 小时前
《从零入门Linux系统篇(五十四):线程篇·七——互斥锁底层原理:从原子交换到线程竞争与锁实现》
linux·运维·服务器·开发语言·c++·驱动开发·系统架构
Java后端的Ai之路14 小时前
Python进阶探索24_应用案例_linux系统的监控
linux·开发语言·python·应用·探索
程序员清风14 小时前
PydanticAI 实战:用类型安全构建可靠的 Python Agent
开发语言·python·安全
落魄实习生14 小时前
Agent Scope Java 2.x 系列【10】Middleware
java·开发语言·ai