我想从 pygame surface 在 tkinter 中加载图像,但我遇到了问题。
这是我目前正在尝试的:
image= pygame.image.tostring(surf, 'RGB')
tkimage= tkinter.PhotoImage(data= image)
canvas.create_image(0, 0, tkimage)
但不幸的是我得到了这个错误:
_tkinter.TclError: couldn't recognize image data
PhotoImage
class只能读取 GIF
和 PGM
/PPM
文件,直接从文件或作为 base64
编码字符串。
你应该使用 Python Imaging Library用于为 Tk 加载和创建图像。
这是一个例子:
import pygame
from PIL import Image
import ImageTk
import Tkinter
# load image in pygame
pygame.init()
surf = pygame.image.load('bridge.png')
# export as string / import to PIL
image_str = pygame.image.tostring(surf, 'RGB') # use 'RGB' to export
w, h = surf.get_rect()[2:]
image = Image.fromstring('RGB', (w, h), image_str) # use 'RGB' to import
# create Tk window/widgets
root = Tkinter.Tk()
tkimage = ImageTk.PhotoImage(image) # use ImageTk.PhotoImage class instead
canvas = Tkinter.Canvas(root)
canvas.create_image(0, 0, image=tkimage)
canvas.pack()
root.mainloop()
我是一名优秀的程序员,十分优秀!