鱼C论坛

 找回密码
 立即注册
查看: 3634|回复: 1

每隔0.5秒输出一个圆点来模拟动态进度条效果的过程

[复制链接]
发表于 2022-12-18 11:22:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 lzb1001 于 2022-12-18 11:28 编辑

见https://www.jb51.net/article/212447.htm

微信截图_20221218111740.jpg

下面的这个程序,本意是每隔0.5秒输出一个圆点来模拟动态进度条效果的过程,

在IDLE中、Spyder中运行不会有问题。---经测试有问题!
然而在PyCharm和cmd中并没有实现这个动画的效果,而是等了5秒钟以后忽地一下子输出了所有的内容。---经测试有问题!

正如刚才所说,如果有其他措施能强制刷新并清空缓存,就可以避免这个问题了:

一种方法是使用print()函数的flush参数
---无法实现!!!

一种方法是调用sys.stdout.flush()函数。
---无法实现!!!

除了这两种方式之外,如果在输出的内容中有回车符\r,也会立刻输出到屏幕,从而间接实现上面的效果。但是这样会覆盖本行已经输出的内容,使用时要注意。
(1)IDLE环境下:保存后双击运行(或鼠标右边单击该.py文件-打开方式-从上往下数第2个python)可以实现动画效果,但若直接run module则/r不起作用无法覆盖本行已经输出的内容也就是说没有实现动画效果
(2)pycharm环境下:可以实现动画效果
(3)spyder环境下:未测试
(4)CMD环境下:可以实现动画效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-18 17:05:34 | 显示全部楼层
本帖最后由 阿奇_o 于 2022-12-18 17:07 编辑

print() 背后本质上是 sys.stdout.write() 和 sys.stdout.flush() 的 组合使用。  

IDLE里不行,那是因为IDLE本身会 捕获了每次的标准输出,并显示到它自己的界面上(IDLE本身是用tkinter写的,其输出界面有自己的组件,类似Tk里的Text)

所以,在IDLE里 不会像 CMD/Python交互界面里那样。  其他环境,也是类似的道理,就看它直接用了标准输出或等同于stdout,还是它自己另外搞了一套。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-12 17:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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