python单行动态刷新不了_python 控制台单行刷新,多行刷新实例

先贴出单行刷新实现的进度条:

007b7efcb561b897d03de7bfd3cb3893.png

对于控制台的单行刷新,比较简单,先直接贴出代码:

strarrs = ['/','|','\\']

for i in range(15):

sys.stdout.write(strarrs[i % 3]+'{}/15:'.format(i+1)+'#' * i+'\r')

sys.stdout.flush()

time.sleep(1)

对于单行刷新以及坑

1.print是对sys.stdout.write的友好封装,利用sys.stdout.write把数据输出到标准输出,貌似也可用print来做,这里没有深入研究

2.一定要在write()里面加入 '\r',或者是'\b'等转义字符,其中python转义字符表如下:

转义字符

描述

\(在行尾时)

续行符

\\

反斜杠符号

\'

单引号

\"

双引号

\a

响铃

\b

退格(Backspace)

\e

转义

\000

\n

换行

\v

纵向制表符

\t

横向制表符

\r

回车

\f

换页

\oyy

八进制数yy代表的字符,例如:\o12代表换行

\xyy

十进制数yy代表的字符,例如:\x0a代表换行

\other

其它的字符以普通格式输出

这就相当于是回车到了输出开头,然后,重新写,在刷新!

如此,一个简单的进度条就实现了!

接下来说一说,多行的刷新问题:

多行刷新,就不能简单的使用输入输出了,应该使用的是一个curses的库,这个库,是以前用c写的库,如果熟悉c下,curses库的使用的话,用python会上手很快.

但是我之前并没有接触罗..一点一点看罗- - ,还有一点就是这个库,现在好像貌似只能在linux下使用,windows不能使用,mac不太清楚,windows下貌似是有别的解决方案

上效果图:

86395a7c7cdbd5d8304fbe8d637e67c7.png

大部分实现curses,的程序模式都是基于以下的代码

stdscr=curses.initscr()

# 一些常用设置

curses.noecho()

curses.cbreak()

stdscr.keypad(1)

# 以下写监听按键的代码或者loop代码等...

....

#关闭之前的操作

stdscr.keypad(0)

curses.echo()

curses.nocbreak()

curses.endwin()

主要的程序逻辑都在...中,下面直接贴出代码:

import curses

import time

import os

import random

stdscr = curses.initscr()

curses.noecho() #不输出- -

curses.cbreak() #立刻读取:暂不清楚- -

stdscr.keypad(1) #开启keypad

stdscr.box()

width = os.get_terminal_size().columns

height = os.get_terminal_size().lines

c_y = height//2 - 1

c_x = width//2 - 10

stdscr.addstr(c_y+5,c_x,'press C to continue',curses.A_REVERSE)

while True:

c = stdscr.getch()

if c == ord('c') or c == ord('C'):

break

zh_ = '1234567890-qwertyuiopasdfghjklzxcvbnm,[;l,]/~!@#$%^&*()_+}"?{:>

while True:

for linei in range(1,width-1):

for linej in range(1,height-1):

if linej == c_y:

if linei <= 5 or linei+6 >= width:

stdscr.addstr(linej,linei,'$')

else:

stdscr.addstr(linej,c_x,time.strftime('%Y-%m-%d %H:%M:%S'),curses.A_BOLD)

else:

randominx = random.randint(0,len(zh_)-1)

stdscr.addstr(linej,linei,zh_[randominx])

stdscr.move(c_y,c_x)

stdscr.refresh()

time.sleep(1)

curses.endwin()

这样,一个多行刷新的demo就完成了.

以上这篇python 控制台单行刷新,多行刷新实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持聚米学院。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值