Iv'e最近开始学习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
两点:
-
当使用Tkinter时,它已经有一个主循环(例如
while 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
如果你想拍摄屏幕的图像,你应该使用grab()
from PIL import ImageGrab
im = ImageGrab.grab()
im.save("save.png")