2017-01-23 28 views
0

私はPythonを使ってある種のテキストアニメーションを探しています。 はあなたがロード中にMetasploitのを、使用している場合は、テキストの波が 例を表示されます。 まず 最初 最初 最初 最初 (それのすべてが同じ行になります) 私はsys.stdoutのを使って何かを考えていました.write( "")しかし、私はそれが大文字にされた後に小文字で置く最後のシンボル を置き換えます。Pythonは大文字と大文字のアニメーションを無効にします

# This version is fixed and works 
import sys, time 
lowerstr = "buffering" 
upperstr = lowerstr.upper() 
for x in range(len(lowerstr)): 
    s = '\r' + lowerstr[0:x] + upperstr[x] + lowerstr[x+1:] + '\r' 
    sys.stdout.write(s) 
    sys.stdout.flush() 
    time.sleep(0.1) 
+0

これは、あなたがhttp://stackoverflow.com/questions/2122385/dynamic-terminal-printing-with-探しているものの周りのようですpython – nerdlyist

+0

私はそれを以下のスクリプトに変更し、 "\ r"を募集に追加し、それを修正して、私が望むことができるようにしました。皆さん、助けてくれてありがとう! s = '\ r' + lowerstr [0:x] + upperstr [x] + lowerstr [x + 1:] + '\ r' – RoNAPC

+0

新しい変更質問!最後に変更を追加します。今では誰も、コード内でオリジナルコードと奇妙な問題が何であったかは分かりません。 – furas

答えて

1
import sys 
import time 

data = ["b","u","f","f","e","r","i","n","g"] 

# display with one upper char 

for x in range(len(data)): 
    # remeber lower char 
    old = data[x] 

    # replace with upper char 
    data[x] = old.upper() 

    # create full text 
    text = "".join(data) 

    # display full text 
    sys.stdout.write("\r") 
    sys.stdout.write(text) 
    sys.stdout.flush() 

    # put back lower char 
    data[x] = old 

    time.sleep(1) 

# display without upper chars at the end 

text = "".join(data) 

sys.stdout.write("\r") 
sys.stdout.write(text) 
sys.stdout.flush() 

あなたは、その後に余分な文字を入れた場合は上位バージョン持っていないdataで終わる - すなわち。空の文字列"" - ループの後にコードを書く必要はありません。for

先頭に空文字列を入れて、最初の文字を上の文字なしで表示することもできます。

import sys 
import time 

# text with extra chars at the start and at the end 
data = ["", "b","u","f","f","e","r","i","n","g", ""] 

# display with one upper char 

for x in range(len(data)): 
    # remeber lower char 
    old = data[x] 

    # replace with upper char 
    data[x] = old.upper() 

    # create full text 
    text = "".join(data) 

    # display full text 
    sys.stdout.write("\r") 
    sys.stdout.write(text) 
    sys.stdout.flush() 

    # put back lower char 
    data[x] = old 

    time.sleep(1) 
0

このバージョンでは、各文字を繰り返し処理するのではなく、文字列を組み合わせています。適切な文字の上に.upper()を使用することによって、upperstrを完全に取り除くことができます。 Pythonの組み込み関数であるため、listを変数名として使用しないでください。

import sys 
import time 

lowerstr = "buffering" 
upperstr = lowerstr.upper() 
for x in range (len(lowerstr)): 
    s = lowerstr[0:x] + upperstr[x] + lowerstr[x+1:] + '\r' 
    sys.stdout.write(s) 
    sys.stdout.flush() 
    time.sleep(1) 
0

のiOS pythonistaシーンを使用して、このアニメーションを実装する

import scene 

label_text = 'abcdefghijklmnopqrstuvwxyz' 

def custom_action(node, progress): 
    ntext = node.text 
    i = int(len(ntext)*progress) 
    iminus1txt = ntext[i-1].lower() if i > 0 else '' 
    ithtxt = ntext[i].capitalize() if i < len(ntext) else '' 
    if i > 0: 
     before_i = ntext[:(i-1)] 
    else: 
     before_i = '' 
    if i < len(ntext): 
     node.text = before_i+iminus1txt+ithtxt+ntext[(i+1):] 
    else: 
     node.text = label_text 

class TextCapitalAnimate(scene.Scene): 
    def setup(self): 
     center = self.bounds.center() 
     labelnode = scene.LabelNode(label_text, font=('Courier', 20), 
           position=center, parent=self) 
     A = scene.Action 
     animate_action = A.repeat(A.call(custom_action, 2), 0) 
     labelnode.run_action(animate_action) 

scene.run(TextCapitalAnimate()) 
関連する問題