python - 当我使用枕头模块截取一张截图时,我该怎么办?
问题描述
每次按下键盘上的“p”键时,我都会尝试使用 Python 拍摄几张屏幕截图,并且每个新屏幕截图都会更新页码。但是,程序最终会在每次按下该键时截取多个屏幕截图。
from PIL import ImageGrab
import keyboard
def shot(number):
while True:
if keyboard.is_pressed('p'):
image = ImageGrab.grab(bbox=(580, 0, 1340, 1080))
image.save(f"{number} page.pdf")
shot(number + 1)
else:
pass
for i in range(1, 2):
shot(i)
解决方案
问题是您使用的递归,您在屏幕后立即调用它,试试这个:
from PIL import ImageGrab
import keyboard
import time
def shot(number):
while True:
if keyboard.is_pressed('p'):
image = ImageGrab.grab(bbox=(580, 0, 1340, 1080))
image.save(f"{number} page.pdf")
break
else:
pass
i=1
while True:
shot(i)
#suspend for a second, so we don't take another screen immediately
time.sleep(1)
i+=1
但是有一种更简单的方法,如果使用 ,则不需要使用循环keyboard.wait
,这也更有效。
同样为了避免内存消耗,我们可以通过一个简单的循环来摆脱递归:
from PIL import ImageGrab
import keyboard
import time
def shot(number):
keyboard.wait("p")
image = ImageGrab.grab(bbox=(580, 0, 1340, 1080))
image.save(f"{number} page.pdf")
time.sleep(1)
i=1
while True:
shot(i)
i+=1
推荐阅读
- python - 我可以在 Python 中创建一个数据文件并将其导入到其他 python 文件吗
- python - 相关 Series.corr(series2) 给了 NAN 为什么?
- python-3.x - 如何在单链接中更改我的打印功能?
- laravel - Laravel Dusk 错误 - 无法运行默认测试
- python - 我如何设置喜欢计数的长度
- c - C 中的 char (*)[20] 是什么意思?
- android - 无法解析符号'WRITE_SMS
- json - 视觉代码:从 json 文件中删除注释
- django - reactjs和django如何结合或集成
- c# - OpenID Connect:如何在客户端凭证流中添加声明数据