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()
感謝。我會更新我的OP。我查看了粘貼鏈接中接受的答案;我使用Windows 7,所以它似乎我不能使用termios? – Moondra
不,你不能,但有一個類似的答案MSFT https://stackoverflow.com/questions/12175964/python-method-for-reading-keypress – pypypy
謝謝。 msvcrt似乎沒有檢測到我的按鍵。我已經用我在msvcrt上的嘗試和我得到的響應更新了我的OP。我可能做錯了什麼? – Moondra