python自动保存打印屏幕

python自动保存打印屏幕,python,printscreen,Python,Printscreen,Iv'e最近开始学习python编程,在我的第一个程序中遇到了一些问题。这是一个自动保存打印屏幕的程序 如果我在剪贴板中保存了一个打印屏幕并启动程序,它会输出一个.png文件。 如果我在剪贴板中没有任何内容的情况下启动程序,然后按print screen,它将输出一个.png文件 但是如果我在程序已经打印了一个.png文件之后按print screen,它绝对不会做任何事情。甚至不能使用ctrl+c复制文本 这是我使用的代码 from PIL import ImageGrab from Tkin

Iv'e最近开始学习python编程,在我的第一个程序中遇到了一些问题。这是一个自动保存打印屏幕的程序

如果我在剪贴板中保存了一个打印屏幕并启动程序,它会输出一个.png文件。 如果我在剪贴板中没有任何内容的情况下启动程序,然后按print screen,它将输出一个.png文件

但是如果我在程序已经打印了一个.png文件之后按print screen,它绝对不会做任何事情。甚至不能使用ctrl+c复制文本

这是我使用的代码

from PIL import ImageGrab
from Tkinter import Tk
import time

r = Tk()

while True:

    try:
        im = ImageGrab.grabclipboard()
        date = time.strftime("%Y-%m-%d %H.%M.%S")
        im.save(date + ".png")
        r.clipboard_clear()
    except IOError:
        pass
    except AttributeError:
        pass
如果要拍摄屏幕图像,应使用grab()

from PIL import ImageGrab
im = ImageGrab.grab()
im.save("save.png")
两点:

  • 当使用Tkinter时,它已经有一个主循环(例如,
    而True:
    )。当您创建自己的主循环时,会阻止Tkinter进行它应该进行的处理

  • 如果你想注册一个热键,有很多方法可以做到

  • 实际上,您需要做的是以下几点:

    import Tkinter as tk
    from PIL import Image, ImageGrab
    
    root = tk.Tk()
    last_image = None
    
    def grab_it():
        global last_image
        im = ImageGrab.grabclipboard()
        # Only want to save images if its a new image and is actually an image.
        # Not sure if you can compare Images this way, though - check the PIL docs.
        if im != last_image and isinstance(im, Image):
            last_image = im
            im.save('filename goes here')
        # This will inject your function call into Tkinter's mainloop.
        root.after(100, grab_it) 
    
    grab_it() # Starts off the process
    

    那不是我想做的。每次按下“打印屏幕”时,我都要打印一张图像。在这里,您可以看到可能的绑定:打印屏幕未列出。我想它是由windows/linux操作的,因此不能由用户程序绑定