Matlab-GUI程序 界面实时显示命令行中运行过程
在Matlab的GUI程序开发中,我们常常先测试完成部分的代码构成一个函数脚本,将来以便在最终GUI开发时直接调用函数。
这种开发思路没有任何问题,也很高效,代码也很简洁。博主本人也是这么做的。
但这样做其实是存在一个很严重的问题:函数调用只负责输出最终结果,中间的执行过程是不做任何显示的。
当然,如果本身运算量小无可厚非。当程序进行大量运算时,界面不做任何显示,真心无奈怀疑是不是出了BUG,卡住不动了??!!
因此,我们此时是需要在GUI界面对运行状态做显示的。不然,只能在在命令行中看到运行过程了…这其实是一件很不友好的事情~
解决方法:
(这个问题也困扰了我几天,最后我是下面的方法解决的,如有更好的解决思路,欢迎评论~)
我们需要把函数的代码稍作修改粘贴到需要执行的GUI脚本中。
修改1:
去掉 function 和 end,只用中间包裹的部分。
对于函数输入的参数要以代码赋值的形式提前补充到代码开头。同样,函数的输出也要做相应处理。
(如果函数参数和输出的变量名在GUI使用时变量名时同样的,那么,可以忽略修改1)
修改2:
由于,计算机程序运行速度很快,我们需要在适当的地方【使用pause函数】“暂停”。以保证GUI可以正确的显示运行过程。
下面举个栗子~
原函数代码:
function [f] = knn_opera(a,b,c,d)
%---------省略一堆代码
for h=3:len%遍历测试点
disp(strcat("测试点[",num2str(h),"]运算完成"));
end
disp(strcat("测试运算完成"));
end
修改后:(注:a1,b1,c1,d1,f1为GUI脚本中使用的变量,handles.text3为GUI显示的部分的ID)
a=a1;
b=b1;
c=c1;
d=d1;
%---------省略一堆代码
for h=3:len%遍历测试点
disp(strcat("测试点[",num2str(h),"]运算完成"));
pause(1);
state_str=strcat("测试点[",num2str(h),"]运算完成");
set(handles.text3,'string',state_str);
end
disp(strcat("测试运算完成"));
pause(1);
state_str=strcat("测试运算完成");
set(handles.text3,'string',state_str);
f1=f;
然后将修改后的代码粘贴到需要的地方即可。
另外,一个Matlab代码排版格式化的小tips:Ctrl+a Ctrl+i
写完了,撒花~