2017-05-25 7 views
0
from PIL import Image 
import time 
import subprocess 
for i in bio: 
    p = subprocess.Popen(["C:\Program Files\IrfanView\i_view64.exe",'C:\\Users\Moondra\\Bioteck_charts\{}.png'.format(i)]) 
    time.sleep(5) 
    p.kill() 

これは私の現在のコードです。 私はWindows 7を使用しています。リストを繰り返していますが、各要素については、画像を開いてから5秒後に閉じています。しかし、私が長い間画像を勉強してから、中断した箇所からループを再開したい場合は、このループを一時停止することができます。「スペースバー」を押してループを一時停止します。ループを再開するにはもう一度押してください(更新を参照)

Psudo-コードはこのようなものです:

from PIL import Image 
import time 
import subprocess 
for i in bio: 

    p = subprocess.Popen(["C:\Program Files\IrfanView\i_view64.exe",'C:\\Users\Moondra\\Bioteck_charts\{}.png'.format(i)]) 
    time.sleep(5) 
    if Keypress == 'Spacebar': 
     pause 
     if Keypress =="Spacebar": resume 


    p.kill() 

私は、これら二つのスレッドを見ましたが、1つは、(ユーザー入力の)9歳以上であるとの両方が、私は本当に慣れていないよスレッドを(使用して複雑なようですと)。

ユーザ入力:

How to get user input during a while loop without blocking

ループを一時停止:

Python - using [spacebar] to pause for loop

は私が望むものを行うにはきれいな方法はありますか?

EDIT:msvcrt

from msvcrt import getch 
while True: 
    key = ord(getch()) 
    print(key) 
    if key == 27: #ESC 
     break 

を使用して

テストはジャスト出力255(何度も)ように思われます。 escを押すと、反応やループが壊れません。 印刷された番号(255)は、別のキーを押しても変化しません。

UPDATE

私はそれを別の方法をしようとしています。これが良いのかどうかは分かりませんが、私はと呼ばれるモジュールがkeypresses入力を認識していることを発見しました。 私はそうするためにスレッドを使用しようとしていますが、スレッドを正しく処理するタイミングが得られていないようです。私の問題は、私のスレッドでtime.sleep()が呼び出されたとき、私のキー押下は読み込まれないということです。スレッド輸入スレッド 輸入キーボード 輸入サブプロセス 輸入漬物から

あなたはKeyPressイベントではない入力を()を検出するために探している

def keyboard_press(): 
    while p == True: 
     if keyboard.is_pressed('down') == True: 
      print('yes') 
      input() 
      p.kill() 
     #continue 


with open('C:\\Users\Moondra\\Bioteck.pickle', 'rb') as file: 
    bio = pickle.load(file) 



for i in bio[:5]: 

    p = subprocess.Popen(["C:\Program Files\IrfanView\i_view64.exe",'C:\\Users\Moondra\\Bioteck_charts\{}.png'.format(i)]) 
    from threading import Thread 
    t = Thread(target = keyboard_press, args =()) 
    t.start() 
    t.join() 
    time.sleep(3) 
    p.kill() 

答えて

1

は、参考のためにthis

+0

感謝を見てみましょう。 OPを更新します。私はペーストされたリンクで受け入れられた答えを見た。私はWindows 7を使用するので、私はtermiosを使用できないようですか? – Moondra

+1

あなたは傾けることはできませんが、msftと同様の回答がありますhttps://stackoverflow.com/questions/12175964/python-method-for-reading-keypress – pypypy

+0

ありがとうございます。 msvcrtはキーの押下を検出していないようです。私はmsvcrtへの私の試みと私が得ている応答で私のOPを更新しました。私が間違っているかもしれない何か? – Moondra

関連する問題