スレッド、引数、キー入力(opencv2)
import threading
import time
import sys
import cv2
class MyThread(threading.Thread):
def __init__(self, val): #インスタンス化メソッド
self.mode = val #名前をつける
def run(self):
img1 = cv2.imread("img.jpg")
# サイズをそろえる
window_size = (400,400)
img = cv2.resize(img1, window_size)
# 画像を表示
while True:
cv2.imshow("img",img) # ウィンドウ開かないとキー入力できない
if cv2.waitKey(1) == ord('q'):
break
time.sleep(1)
cv2.destroyAllWindows()
def mainloop():
t = MyThread(1)
t.start()
if __name__ == "__main__":
args = sys.argv
if 2 > len(args):
print("usage : python3 ***.py ")
exit(1)
dummy = args[1]
mainloop()
exit(1)
global
調べてみたら、pythonのglobal宣言は、そのスコープの中においてaをglobal変数として扱う、ということらしい。つまり、fooのローカルスコープから参照したときにaはローカルスコープから探し出される。
よって、foo内でaを参照したければ、foo内でもglobal宣言してあげる必要があるってこと。
pynput
X がいるので SSHとかターミナルでは使えない。
# sample2.py
from pynput import keyboard # ターミナルでは使えない
import time
import sys
def press(key):
global exitcnt
try:
print('アルファベット {0} が押されました'.format(key.char))
exitcnt = exitcnt + 1
except AttributeError:
exitcnt = exitcnt + 1
print('スペシャルキー {0} が押されました'.format(key))
# def release(key):
# print('{0} が離されました'.format(key))
# if key == keyboard.Key.esc: # escが押された場合
# return False # listenerを止める
if __name__ == "__main__":
# listener = keyboard.Listener(
# on_press=press,
# on_release=release)
listener = keyboard.Listener(on_press=press)
listener.start()
global exitcnt
exitcnt = 0
for i in range(30):
time.sleep(1)
if(exitcnt >= 1):
exit(1)
print("." + str(exitcnt))
exit(1)
ターミナルでも有効なキー判定方法
https://www.ishikawasekkei.com/index.php/2019/10/21/python-programing-inkey/
pip install blessed
# https://www.ishikawasekkei.com/index.php/2019/10/21/python-programing-inkey/
#pip install blessed
from blessed import Terminal
t = Terminal()
with t.cbreak():
while True:
k = t.inkey(timeout=0.001)
if not k :
pass
elif k.is_sequence:
if k.name == 'KEY_ESCAPE':
break
print(f'"{k.name}"が押されました。終了するには「ESC」キーを押してください。')
else:
print(f'"{k}"が押されました。終了するには「ESC」キーを押してください。')