2012/03/30

[maya] プログレスバーにくるくる回るやつ表示したい

なんて説明したらいいか分からないので結果から先にお見せします。


昔DOS画面でたまに見かけた記号の組み合わせでくるくる回って見えるやつ、
プログレスバーのステータス部分に出したいなと思いまして。


import pymel.core as pm

kuru2 = "-/|\\"
amount = 0
status = '                loading... %s                ' % kuru2[0]


pm.progressWindow(title='KuruKuru ProgBar', progress=amount, status=status, isInterruptable=True)

while True :
 if pm.progressWindow(query=True, progress=True) >= 100:
  break
 if pm.progressWindow(query=True, isCancelled=True):
  break

 for n in range(0, 20):
  print n

 amount += 1
 status = '                loading... %s                ' % kuru2[amount % len(kuru2)]
 pm.progressWindow(edit=True, progress=amount, status=status)

pm.progressWindow(endProgress=True)

■まず、回すのに必要な「-」「/」「|」「\」を用意します
プログレスバーのパーセンテージ用に変数amountも用意
kuru2  = "-/|\\"
amount = 0

■ステータス欄用の文字列に↑の1文字目をとりあえず入れます
※妙な余白がありますが、mayaがQtUIになってから見切れるようになったのでそれの対策です
status = '                loading... %s                ' % kuru2[0]

■プログレスバーを作ります
pm.progressWindow(title='KuruKuru ProgBar', progress=amount, status=status, isInterruptable=True)


■amountが100になるか、Escキーでキャンセルされるまで繰り返します
while True :
 if pm.progressWindow(query=True, progress=True) >= 100:
  break
 if pm.progressWindow(query=True, isCancelled=True):
  break

■ここには実際の処理を入れます
とりあえず適当にプリント文を20回ほど回します
 for n in range(0, 20):
  print n

■amountを1増やし、ステータス欄の回す文字を次のやつに差し替えます
%は割った余りを求める演算子なので文字総数で割ると、1コずつ進んで0に戻るを繰り返してくれます

こんな感じ

amount: 8 → 8 / 4 = 2 あまり 0
amount: 9 → 9 / 4 = 2 あまり 1
amount:10 → 10 / 4 = 2 あまり 2
amount:11 → 11 / 4 = 2 あまり 3
amount:12 → 12 / 4 = 3 あまり 0
amount:13 → 13 / 4 = 3 あまり 1
amount:14 → 14 / 4 = 3 あまり 2

 amount += 1
 status = '                loading... %s                ' % kuru2[amount % len(kuru2)]
 pm.progressWindow(edit=True, progress=amount, status=status)

■amountが100に達してwhileループを抜けたらプログレスバーを終了します
pm.progressWindow(endProgress=True)


…と、超簡単ですが知ってる人がみたらニヤリとしそうなスクリプト紹介でした。

2 件のコメント:

  1. 通りすがりですが、なつかしいネタにちょっと感動してしまいました。笑

    返信削除
    返信
    1. >よしむさん
      コメントありがとうございます!
      分かる人がいてくれて嬉しいですw

      削除