0

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

如果我在剪贴板中保存了一个打印屏幕并启动程序,它会输出一个 .png 文件。如果我在剪贴板中什么都没有启动程序,然后按打印屏幕,它会输出一个 .png 文件。

但是,如果我在程序已经打印了一个 .png 文件后按下打印屏幕,它绝对不会做任何事情。甚至不能使用 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
4

2 回答 2

1

两点:

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

  2. 如果你想实际注册一个热键,有几种 方法可以做到。

您实际上想要做的是更多类似以下的事情:

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
于 2013-07-24T13:32:56.777 回答
0

如果要拍摄屏幕图像,则应使用 grab()

from PIL import ImageGrab
im = ImageGrab.grab()
im.save("save.png")
于 2013-07-24T12:57:46.210 回答