使用 PIL 或 pillow 绘制图像并用 TKinter 显示
Using PIL or pillow to draw an image and display it with TKinter
我想以编程方式绘制图像。本质上,我是在谈论将每个像素设置为图像的地图,我想使用 PIL/pillow 来做到这一点。然后,我想在屏幕上显示它。 GUI 基于 TKinter。
root = Tk()
root.wm_title("Lands - A world generator")
root.resizable(0,0)
prepare_menu()
canvas = Canvas(root, width=canvas_width, height=canvas_height)
canvas.pack()
root.mainloop()
prepare_menu
设置菜单并将一个条目与事件处理程序相关联,事件处理程序调用函数 show_elevation_map
,如下所示:
def show_elevation_map(p, width, height):
hm = platec.get_heightmap(p)
img = PIL.Image.new('RGBA', (width, height))
pixels = img.load()
for y in range(0, height):
for x in range(0, width):
pixels[x, y] = (255, 0, 0, 255)
pi = ImageTk.PhotoImage(img)
sprite = canvas.create_image(100, 100, image=pi)
canvas.update()
我这样试过,但我在屏幕上看不到任何东西,而我希望看到的一切都是红色的。我在这里做错了什么?
谢谢。
您的图片可能正在被垃圾收集。您需要保存对图像的持久引用。
我想以编程方式绘制图像。本质上,我是在谈论将每个像素设置为图像的地图,我想使用 PIL/pillow 来做到这一点。然后,我想在屏幕上显示它。 GUI 基于 TKinter。
root = Tk()
root.wm_title("Lands - A world generator")
root.resizable(0,0)
prepare_menu()
canvas = Canvas(root, width=canvas_width, height=canvas_height)
canvas.pack()
root.mainloop()
prepare_menu
设置菜单并将一个条目与事件处理程序相关联,事件处理程序调用函数 show_elevation_map
,如下所示:
def show_elevation_map(p, width, height):
hm = platec.get_heightmap(p)
img = PIL.Image.new('RGBA', (width, height))
pixels = img.load()
for y in range(0, height):
for x in range(0, width):
pixels[x, y] = (255, 0, 0, 255)
pi = ImageTk.PhotoImage(img)
sprite = canvas.create_image(100, 100, image=pi)
canvas.update()
我这样试过,但我在屏幕上看不到任何东西,而我希望看到的一切都是红色的。我在这里做错了什么?
谢谢。
您的图片可能正在被垃圾收集。您需要保存对图像的持久引用。