Numpy 矩阵到 tkinter Canvas

Numpy Matrix to tkinter Canvas

如何将 Numpy 矩阵作为位图显示到 Tkinter 中 canvas? 更准确地说,如何用矩阵中的内容填充 PhotoImage

photo = ImageTk.PhotoImage(...)
self.canvas.create_image(0,0,image=photo,anchor=Tkinter.NW)

Here 是有效的解决方案,稍作修改以使其有效(某些功能已弃用)并简化它以仅保留必要的部分。我们必须使用 Image.frombytes(...) 来读取 numpy 矩阵中的数据。

import Tkinter
from PIL import Image, ImageTk
import numpy

class mainWindow():
    def __init__(self):
        self.root = Tkinter.Tk()
        self.frame = Tkinter.Frame(self.root, width=500, height=400)
        self.frame.pack()
        self.canvas = Tkinter.Canvas(self.frame, width=500,height=400)
        self.canvas.place(x=-2,y=-2)
        data=numpy.array(numpy.random.random((400,500))*100,dtype=int)
        self.im=Image.frombytes('L', (data.shape[1],data.shape[0]), data.astype('b').tostring())
        self.photo = ImageTk.PhotoImage(image=self.im)
        self.canvas.create_image(0,0,image=self.photo,anchor=Tkinter.NW)
        self.root.update()
        self.root.mainloop()

mainWindow()