91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中如何控制臺單行刷新和多行刷新

發布時間:2021-08-03 10:54:31 來源:億速云 閱讀:400 作者:小新 欄目:開發技術

這篇文章主要介紹python中如何控制臺單行刷新和多行刷新,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

先貼出單行刷新實現的進度條:

python中如何控制臺單行刷新和多行刷新

對于控制臺的單行刷新,比較簡單,先直接貼出代碼:

 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下貌似是有別的解決方案

上效果圖:

python中如何控制臺單行刷新和多行刷新

大部分實現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中如何控制臺單行刷新和多行刷新”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洪湖市| 绩溪县| 渭源县| 抚顺县| 云龙县| 松滋市| 图们市| 牡丹江市| 交口县| 普陀区| 共和县| 南昌县| 尼勒克县| 乐清市| 兴仁县| 香河县| 石城县| 察雅县| 巴楚县| 辽中县| 汤原县| 上饶市| 秭归县| 冷水江市| 德江县| 吉隆县| 钟山县| 砚山县| 平昌县| 阳西县| 井冈山市| 淮北市| 房山区| 治多县| 徐闻县| 芦溪县| 靖州| 百色市| 五家渠市| 遂宁市| 焉耆|