每隔0.5秒输出一个圆点来模拟动态进度条效果的过程
本帖最后由 lzb1001 于 2022-12-18 11:28 编辑见https://www.jb51.net/article/212447.htm
下面的这个程序,本意是每隔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环境下:可以实现动画效果 本帖最后由 阿奇_o 于 2022-12-18 17:07 编辑
print() 背后本质上是 sys.stdout.write() 和 sys.stdout.flush() 的 组合使用。
IDLE里不行,那是因为IDLE本身会 捕获了每次的标准输出,并显示到它自己的界面上(IDLE本身是用tkinter写的,其输出界面有自己的组件,类似Tk里的Text)
所以,在IDLE里 不会像 CMD/Python交互界面里那样。其他环境,也是类似的道理,就看它直接用了标准输出或等同于stdout,还是它自己另外搞了一套。
页:
[1]