python 控制台单行刷新,多行刷新实例
先贴出单行刷新实现的进度条:
对于控制台的单行刷新,比较简单,先直接贴出代码:
strarrs=['/','|','\\'] foriinrange(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转义字符表如下:
这就相当于是回车到了输出开头,然后,重新写,在刷新!
如此,一个简单的进度条就实现了!
接下来说一说,多行的刷新问题:
多行刷新,就不能简单的使用输入输出了,应该使用的是一个curses的库,这个库,是以前用c写的库,如果熟悉c下,curses库的使用的话,用python会上手很快.
但是我之前并没有接触罗..一点一点看罗--,还有一点就是这个库,现在好像貌似只能在linux下使用,windows不能使用,mac不太清楚,windows下貌似是有别的解决方案
上效果图:
大部分实现curses,的程序模式都是基于以下的代码
stdscr=curses.initscr() #一些常用设置 curses.noecho() curses.cbreak() stdscr.keypad(1) #以下写监听按键的代码或者loop代码等... .... #关闭之前的操作 stdscr.keypad(0) curses.echo() curses.nocbreak() curses.endwin()
主要的程序逻辑都在...中,下面直接贴出代码:
importcurses importtime importos importrandom 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,'pressCtocontinue',curses.A_REVERSE) whileTrue: c=stdscr.getch() ifc==ord('c')orc==ord('C'): break zh_='1234567890-qwertyuiopasdfghjklzxcvbnm,[;l,]/~!@#$%^&*()_+}"?{:><}"'';' whileTrue: forlineiinrange(1,width-1): forlinejinrange(1,height-1): iflinej==c_y: iflinei<=5orlinei+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控制台单行刷新,多行刷新实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。