查看: 1475|回复: 13|关注: 0

[已解决] MATLAB GUI 显示问题

[复制链接]

新手

12 麦片

财富积分


050


6

主题

36

帖子

0

最佳答案
想要显示程序的进度,分别在pushbottn函数的程序前面、后面加了这几行代码
display_process = '正在运行中';
set(handles.display_process,'String',display_process);



display_process = '完成';
set(handles.display_process,'String',display_process);


按道理来说,点击pushbottn后,应该立马在静态文本上出现  '正在运行中‘ 字样,但是我的是快要到程序结束了才出现,不知道是为什么呢?


新手

12 麦片

财富积分


050


6

主题

36

帖子

0

最佳答案
 楼主| 发表于 2018-1-29 19:29:40 | 显示全部楼层
都没人遇到这个问题吗???求指教啊

入门

90 麦片

财富积分


50500


2

主题

40

帖子

11

最佳答案
发表于 2018-1-29 19:55:47 | 显示全部楼层
我测试了一下,没有问题。极有可能是由于程序运行过快,显示来不及或程序运行造成的卡顿使显示出现问题。
以下为测试程序的一部分
  1. % --- Executes on button press in add.
  2. function add_Callback(hObject, eventdata, handles)
  3. % hObject    handle to add (see GCBO)
  4. % eventdata  reserved - to be defined in a future version of MATLAB
  5. display_process = '正在运行中';
  6. set(handles.display_process,'String',display_process);


  7. % handles    structure with handles and user data (see GUIDATA)
  8. for iw = 1:100
  9.     set(handles.addresult,'String',num2str(iw))
  10.     pause(0.5)
  11. end
  12. display_process = '完成';
  13. set(handles.display_process,'String',display_process);
复制代码

当不加pause(0.5)时出现了和你说的一模一样的情况。循环为100时,运行过快;循环改为10000时,程序运行出现卡顿,最后才显示;
建议你使用waitbar来进行操作。

新手

12 麦片

财富积分


050


6

主题

36

帖子

0

最佳答案
 楼主| 发表于 2018-1-29 20:16:56 | 显示全部楼层
wzq203477 发表于 2018-1-29 19:55
我测试了一下,没有问题。极有可能是由于程序运行过快,显示来不及或程序运行造成的卡顿使显示出现问题。
...

应该不是这个原因,我程序运行总时间是6s  ,但是大概在第5秒时候才会出现  ’正在运行‘,所以才不知道为什么????按道理来说,不是应该第一秒钟的时候就出现吗?

新手

12 麦片

财富积分


050


6

主题

36

帖子

0

最佳答案
 楼主| 发表于 2018-1-29 20:18:30 | 显示全部楼层
wzq203477 发表于 2018-1-29 19:55
我测试了一下,没有问题。极有可能是由于程序运行过快,显示来不及或程序运行造成的卡顿使显示出现问题。
...

还有想问一下,waitbar  我也查了一下,但是我不知道他是怎么控制进度的?因为我的程序不是个for循环,就是单线程的那种,所以说不懂怎么用waitbar来控制,请指教一下,非常感谢

新手

12 麦片

财富积分


050


6

主题

36

帖子

0

最佳答案
 楼主| 发表于 2018-1-29 20:36:31 | 显示全部楼层
wzq203477 发表于 2018-1-29 19:55
我测试了一下,没有问题。极有可能是由于程序运行过快,显示来不及或程序运行造成的卡顿使显示出现问题。
...

display_process = '正在运行中';
set(handles.display_process,'String',display_process);
pause(0.1)

我这样写就没有什么问题了  虽然不知道是为什么?
但是还是特别想知道怎么用waitbar来进行操作??因为在保存数据为txt格式时候,想用一下进度条。谢谢啦

入门

90 麦片

财富积分


50500


2

主题

40

帖子

11

最佳答案
发表于 2018-1-29 20:54:03 | 显示全部楼层 |此回复为最佳答案
很简单的,你直接在命令窗口输入doc waitbar,就可以找到其帮助文档,里面有现成的例子。
我帮你写了一个,望采纳,谢谢~
  1. % --- Executes on button press in add.
  2. function add_Callback(hObject, eventdata, handles)
  3. % hObject    handle to add (see GCBO)
  4. % eventdata  reserved - to be defined in a future version of MATLAB

  5. % handles    structure with handles and user data (see GUIDATA)
  6. h = waitbar(0,'拼了老命在运行,0%...');
  7. TotalNum = 1000;
  8. for iw = 1:TotalNum
  9.     set(handles.addresult,'String',num2str(iw));
  10.     waitbar(iw/TotalNum,h,['拼了老命在运行,',num2str(100*iw/TotalNum),'%...']);
  11. end
  12. close(h)
复制代码

入门

90 麦片

财富积分


50500


2

主题

40

帖子

11

最佳答案
发表于 2018-1-29 20:57:11 | 显示全部楼层
快乐学习927 发表于 2018-1-29 20:36
display_process = '正在运行中';
set(handles.display_process,'String',display_process);
pause(0.1)

你可以把最大循环数增大或减小,看看是什么效果。不要仅仅盯着现在的程序看,这才是一个学习的过程,祝好!

新手

12 麦片

财富积分


050


6

主题

36

帖子

0

最佳答案
 楼主| 发表于 2018-1-29 21:17:05 | 显示全部楼层
wzq203477 发表于 2018-1-29 20:57
你可以把最大循环数增大或减小,看看是什么效果。不要仅仅盯着现在的程序看,这才是一个学习的过程,祝好 ...

好的,特别感谢,刚才试了一下
TotalNum的值可以控制进度条运行的时间长短
主要我还有一个疑问,就是说我怎么把这个进度条运行时间和我自己程序的时间统一成一个时间呢?
意思是就是waitbar到100%时候,以何标准知道程序运行结束呢?

入门

90 麦片

财富积分


50500


2

主题

40

帖子

11

最佳答案
发表于 2018-1-29 21:24:53 | 显示全部楼层
快乐学习927 发表于 2018-1-29 20:18
还有想问一下,waitbar  我也查了一下,但是我不知道他是怎么控制进度的?因为我的程序不是个for循环,就 ...

这种单线程的我没有遇到过,因为matlab无法异步处理数据,语句是一步一步执行的。你自己再找找吧!
给你两个个链接

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表