Matlab GUI 计时器:基于定时器对象自动更新的数字时钟演示
Matlab图形用户界面计时器使用定时器对象自动更新的MatlabGUI一个数字时钟作为显示基本组件的快速演示带有一个按钮用于恢复/暂停执行更新实验室配了新酶标仪孵箱但总有人比如同组摸鱼的小师妹顺便喊我凑凑她的bug顺便蹭我奶茶顺便摸鱼忘守孵育时间番茄钟切来切去占手机空间占电脑窗口还容易被导师抓现行没关系咱们有MATLAB——搞数据搞仿真搞工程的谁电脑上还没个这个宝贝花3分钟拖个控件撸个Timer就行完全嵌入你的MATLAB界面切代码看数据的空瞟一眼完美适配科研狗摸鱼哦不对是高效科研的节奏。先别管老MATLAB人怀念的GUIDE了2020年之后官方就推App Designer了拖控件一键生成框架新手友好到离谱界面还比GUIDE的复古灰好看一万倍。打开MATLAB命令行敲个appdesigner回车界面出来直接新建一个空白App就行。第一步拖三个“没用的装饰有用的核心”控件不对是核心只有两个但拖个居中面板让UI稍微规整点也行我这种有点小强迫症的科研狗必备居中的大面板直接从左侧Component Library拖个Panel到画布中间鼠标拉宽拉满三分之二的高度和宽度双击标题栏把文字删了留空白框或者加个“摸鱼专用孵育计时器”导师看了会不会打我还是删了吧超级大的数字显示标签在刚才的空面板里拖个Label用属性检查器把-FontSize拉到50比如60看个人屏幕我27寸用80都不夸张-HorizontalAlignment和VerticalAlignment都选center居中显示歪歪扭扭太难受-TextColor选个不刺眼的[0.1 0.3 0.7]淡深蓝或者直接搜Matlab的royalblue也行-Text先填个当前的占位符比如“00:00:00”- 最后把这个Label拖满整个面板不留边暂停/恢复二合一按钮在面板下方画布中间别拖进面板怕和大标签挤拖个Button属性检查器调一下-FontSize弄到20显眼-HorizontalAlignment选center-TextColor选白色-BackgroundColor选个亮一点的绿或者红初始文字是“暂停计时”那就配个浅草绿[0.3 0.7 0.3]吧暂停之后自动变红变文字“继续计时”- 按钮宽度拉到画布的四分之一长度自己看着舒服。拖完之后大概长这样脑补一下哈截图太麻烦大淡蓝框中间是80号的00:00:00下面是绿底白字的“暂停计时”。第二步核心别用while循环挂死MATLAB第一次做GUI动态显示的新手是不是直接就想写个while true循环每秒刷新一下Label千万别while循环在GUI主线程里运行的话整个MATLAB都会卡死别说看数据了连关闭窗口都得强制退出。这时候就得掏出MATLAB的定时器timer对象——相当于在后台开了个“小监工”每隔一秒或者你想要的任意时间就过来戳一下主线程的Label让它更新自己不占主线程完美解决卡死问题。1. 在App Designer里加私有属性存timerApp Designer和普通脚本不一样变量不能随便在函数之间传除了全局变量但全局变量太乱了导师看了代码会挠头所以得加个私有属性Private Properties专门存timer对象在App Designer右侧的Code View刚才是Design View切换一下找到顶部菜单栏的Property按钮选Add Private Property然后在生成的properties (Access private)块里加一行TimerObj % 存摸鱼专用计时器别加注释也行但加了自己下次改或者小师妹蹭bug改能看懂。2. 在启动函数startupFcn里初始化并启动timerApp Designer打开第一件事会自动调用startupFcn咱们就在这里写代码Matlab图形用户界面计时器使用定时器对象自动更新的MatlabGUI一个数字时钟作为显示基本组件的快速演示带有一个按钮用于恢复/暂停执行更新先找个标准的时间戳格式比如HH:mm:ss就是24小时制的时分秒然后初始化timer设置触发间隔为1秒触发回调函数为我们待会儿要写的updateTimer最后启动timer同时把按钮的文字和背景色设置成初始状态虽然刚才在Design View里设置过了但写在代码里更保险换了别人的MATLAB版本也不会乱% startupFcn 函数内的代码系统会自动生成startupFcn的空壳直接往里填就行 % 初始化当前时间戳并显示 app.Label.Text datestr(now, HH:mm:ss); % 创建timer对象 app.TimerObj timer(... ExecutionMode, fixedRate, ... % 固定速率触发不管主线程忙不忙除非主线程真的忙炸了会稍微延后但一般1秒没问题 Period, 1, ... % 触发间隔1秒 TimerFcn, (src, event) updateTimer(app) ... % 触发时调用updateTimer(src,event)是timer回调必须带的两个输入参数不管用不用都得写 ); % 启动timer start(app.TimerObj);这里的ExecutionMode选fixedRate是最稳妥的还有其他几个模式比如fixedDelay、fixedSpacing、singleShot感兴趣的可以自己查MATLAB help不过咱们这个简单计时器用fixedRate就行。3. 写触发回调函数updateTimer这个函数就是负责每隔一秒更新Label的文字的同样在Code View里找到顶部菜单栏的Function按钮选Add Private Function因为不需要被外部调用所以设成私有的系统会自动生成一个空壳咱们改成function updateTimer(app) % 直接更新当前时间戳就行不需要存变量一行搞定 app.Label.Text datestr(now, HH:mm:ss); end简单吧4. 最后绑定暂停/恢复按钮的点击回调拖按钮的时候系统会自动生成一个按钮的点击回调ButtonPushed咱们就在这里写逻辑先判断timer现在是运行状态还是停止状态然后根据状态做相反的操作同时更新按钮的文字和背景色% ButtonPushed 函数内的代码系统自动生成直接往里填 if strcmp(app.TimerObj.Running, on) % 如果正在运行就停止timer同时变按钮 stop(app.TimerObj); app.Button.Text 继续计时; app.Button.BackgroundColor [0.8 0.2 0.2]; % 红色 else % 如果停止了就启动timer同时变按钮 start(app.TimerObj); app.Button.Text 暂停计时; app.Button.BackgroundColor [0.3 0.7 0.3]; % 绿色 end这里的strcmp(app.TimerObj.Running, on)是判断timer运行状态的MATLAB的timer对象有个Running属性要么是on要么是off直接用字符串比较就行。第三步测试一下在Code View或者Design View的顶部菜单栏点那个绿色的三角形Run按钮APP就出来了一打开就是当前的时分秒在自动跳点一下绿底的“暂停计时”数字停了按钮变红变“继续计时”再点一下红底的数字又接着跳按钮变回去绿底的。完美对了要是想保存成可执行文件发给小师妹顺便蹭更多奶茶可以在顶部菜单栏点Share按钮选Standalone Desktop App不过这个需要MATLAB Compiler要是没有的话也没关系直接把.mlapp文件发过去就行只要她电脑上有MATLAB 2020a及以上版本就能打开。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2454744.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!