2017-05-25 60 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() 

我看到這兩個線程,但一個是在9歲(用戶輸入),似乎都使用線程(我真的不熟悉紛繁複雜用)。

用戶輸入:

How to get user input during a while loop without blocking

暫停循環:

Python - using [spacebar] to pause for loop

有沒有乾淨的方式做,我想什麼呢?

編輯:使用msvcrt

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

測試似乎只是輸出255(一遍又一遍)。 如果我按esc,沒有反應和循環不會中斷。 即使按下不同的按鍵,打印的號碼(255)也不會改變。

UPDATE

我試圖它以不同的方式。不知道這是否更好,但是,我發現了一個名爲keyboard的模塊,它知道按鍵輸入(並且在玩弄它之後,它似乎工作正常)。 我試圖使用線程來做到這一點,但似乎我沒有得到線程正確的時間。我認爲問題是當我的time.sleep()在我的線程中被調用時,我的按鍵不被讀取。

從螺紋進口螺紋 進口鍵盤 進口子 進口泡菜

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