3

我需要对下面的 tkinter 应用程序的内容进行截图。我在 Windows 7(或 8)上。

from Tkinter import *

def test(x):    
    #print "I'm in event:", x
    if x == 1:            # if event on entry e1 
        print 'e1 event' # do some thing
    elif x == 2:            # also if event on entry e2    
        print 'e2 event'  # do some thing else
    else: 
        print 'no event' 

def test1(x):
    test(1)

def test2(x):
    test(2)


root=Tk()
root.minsize(500,500)
e1=Entry(root)
e1.pack()

e2=Entry(root)
e2.pack()

e1.bind( "<FocusOut>", test1) 
e2.bind( "<FocusOut>", test2)   
button=Button(root, text='print').pack(side=BOTTOM)

root.mainloop()
4

2 回答 2

3

既然你提到你在 Windows 上。您可以Win32 API按照此答案中的指示使用Fastest way to take a screenshot with python on windows。希望这可以帮助。


但实际上Pyscreenshot应该是您正在寻找的。

以下面的代码为例:

from pyscreenshot import grab

im = grab(bbox=(100, 200, 300, 400))
im.show()

如您所见,您可以使用bbox坐标 (100, 200) 截取屏幕截图,其宽度为 300,高度为 400。

另外关于打印检查使用 win32api 打印。我希望这些帮助。

使用 PIL,您可以调整大小:

from PIL import Image
from pyscreenshot import grab

img = grab(bbox=(100, 200, 300, 400))

# to keep the aspect ratio
w = 300
h = 400
maxheight = 600
maxwidth = 800
ratio = min(maxwidth/width, maxheight/height)
# correct image size is not #oldsize * ratio#

# img.resize(...) returns a resized image and does not effect img unless
# you assign the return value
img = img.resize((h * ratio, width * ratio), Image.ANTIALIAS)

我建议更改您的程序,以便您可以在打印前调整图像大小

于 2013-11-13T21:14:12.577 回答
3

我制作了一个模块,用于截取tkinter窗口的屏幕截图。

您可以安装:pip install tkcap

GitHub存储库

用法:

import tkcap

cap = tkcap.CAP(master)     # master is an instance of tkinter.Tk
cap.capture(FileName)       # Capture and Save the screenshot of the tkiner window
于 2021-03-16T03:53:06.660 回答