Python 将标签的Tkinter窗口保存到图像文件
我希望创建一个Python 将标签的Tkinter窗口保存到图像文件,python,tkinter,Python,Tkinter,我希望创建一个Tkinter框架或画布,然后将其保存为图像文件(postscript以外的文件)。框架主要是标签。我在其他地方找到的所有其他方法都涉及到截图(使用ImageGrab或类似方法),但这种方法(见下面的MRE)实际上并没有拍摄画布的图像。它正在抓取画布的不完整部分和用户屏幕的其他部分。很明显,我的坐标有点问题,但最终,我想把整个东西保存为一个图像,而不必在屏幕上显示。因此,如果有办法完全避免截图,那将是理想的 我想要的结果是屏幕上弹出的Tkinter画布的.png(或gif或bmp)
Tkinter
框架
或画布
,然后将其保存为图像文件(postscript以外的文件)。框架
主要是标签
。我在其他地方找到的所有其他方法都涉及到截图(使用ImageGrab
或类似方法),但这种方法(见下面的MRE)实际上并没有拍摄画布的图像。它正在抓取画布的不完整部分和用户屏幕的其他部分。很明显,我的坐标有点问题,但最终,我想把整个东西保存为一个图像,而不必在屏幕上显示。因此,如果有办法完全避免截图,那将是理想的
我想要的结果是屏幕上弹出的Tkinter画布的.png(或gif或bmp)。谢谢
from tkinter import *
from PIL import Image, ImageGrab
class TestClass(Frame):
def __init__(self, parent=None):
self.parent = parent
Frame.__init__(self)
self.main = self.master
self.f = Frame(self.parent)
self.f.pack()
self.can=Canvas(self.f)
self.can.pack(side='left', fill='both', expand=True)
(Label(self.can, text='Hi there', width=15)
.grid(column=0, row=0, padx=10, pady=10))
(Label(self.can, text='Do not panic', width=15)
.grid(column=0, row=2, padx=10, pady=10))
(Label(self.can, text='Count the heads!', width=15)
.grid(column=0, row=3, padx=10, pady=10))
self.can.update()
x=self.can.winfo_rootx()+self.can.winfo_x()
y=self.can.winfo_rooty()+self.can.winfo_y()
x1=x+self.can.winfo_width()
y1=y+self.can.winfo_height()
box=(x,y,x1,y1)
print(box)
grabcanvas = ImageGrab.grab(bbox=box)
grabcanvas.show()
grabcanvas.save('test.png')
if __name__ == '__main__':
root=Tk()
ui = TestClass(root)
ui.pack()
root.mainloop()
如果要将文本表格另存为图像而不显示,则需要将其放入
matplotlib
表格
,然后隐藏绘图ax。如果我想变得更有趣,我会使用一些其他的matplotlib
文本功能,但下面的示例就是为了达到这个目的
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
txt = ['Hi there', 'Do not panic', 'Count the heads!',
'Milliways', 'Mosty Harmless']
df_data = {'Text': txt,
'Numbers':np.random.randint(1, 10, 5)}
df = pd.DataFrame(data=df_data)
fig, ax = plt.subplots()
table = ax.table(cellText=df.values,
colLabels=df.columns,
loc='upper center')
ax.axis('off')
fig.savefig('test.png')
你的代码对我来说很好。