提问人:Adusp 提问时间:11/15/2023 最后编辑:Adusp 更新时间:11/15/2023 访问量:58
如何在代码过程中在python中截屏
How to take screenshot in python during the code
问:
我做了一个while循环,当我按下键盘上的键时,它会给我一个屏幕截图,但我注意到屏幕截图仅在我退出代码时才出现,我希望屏幕截图在代码过程中出现。 代码如下:
from PIL import Image, ImageGrab
import keyboard
import sys
while True:
if keyboard.is_pressed("i"):
img = ImageGrab.grab()
img.save("screenshot.png")
if keyboard.is_pressed("e"):
sys.exit(0)
我尝试做另一个截屏的python脚本,并在主脚本中打开它,但它也不起作用。
答:
0赞
Faruk Karaca
11/15/2023
#1
这样,函数在后台运行,主线程可以继续检查按键并执行其他代码。take_screenshot
def take_screenshot():
while True:
if keyboard.is_pressed("i"):
img = ImageGrab.grab()
img.save("screenshot.png")
screenshot_thread = threading.Thread(target=take_screenshot)
screenshot_thread.start()
while True:
if keyboard.is_pressed("e"):
sys.exit(0)
1赞
cwiz
11/15/2023
#2
我建议使用 keyboard.on_press_key 而不是循环。这样,您就可以等待事件发生,而不是花费处理能力不断循环运行。
keyboard.on_press_key 将第一个参数作为键的 ASCII 值。我通过在相应的字母上调用 ord() 函数来传递它。第二个参数是按下字母时将调用的函数。
而不是将字母“e”映射到它自己的退出函数。我建议使用 keyboard.wait 来继续侦听事件而不是循环。第一个参数是 keyboard.wait 将侦听的键。脚本完成后,程序将自动退出。
import keyboard
from PIL import ImageGrab
def screenshot():
""" Take a screenshot and save it """
img = ImageGrab.grab()
img.save("screenshot.png")
# When the key 'i' is pressed, calls the screenshot function
keyboard.on_press_key(ord('i'), screenshot)
# Process key events until the key 'e' is pressed
keyboard.wait(ord('e'))
评论