如何在代码过程中在python中截屏

How to take screenshot in python during the code

提问人:Adusp 提问时间:11/15/2023 最后编辑:Adusp 更新时间:11/15/2023 访问量:58

问:

我做了一个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脚本,并在主脚本中打开它,但它也不起作用。

python-imaging-library 截图

评论

0赞 alexis 11/15/2023
按下一个键真的会立即通知您的程序吗?例如,当您按下“e”时,您的程序会立即退出吗?
0赞 Sembei Norimaki 11/15/2023
因此,当您按下“i”键时,程序将截取数百万张屏幕截图,直到您发布它,因为您将其置于循环中
0赞 Adusp 11/15/2023
@alexis是的,当我按“E”时它会退出。
0赞 Adusp 11/15/2023
@SembeiNorimaki。我知道。但我问了不同的问题

答:

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'))