4

pygameサーフェスから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
4

2 に答える 2

2

このPhotoImageクラスは、ファイルから直接、またはエンコードされた文字列として、ファイルの読み取りGIFPGM/ファイルの読み取りのみを行うことができます。PPMbase64


Tkのイメージのロードと作成には、PythonImagingLibrary使用する必要があります。

次に例を示します。

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()

ここに画像の説明を入力してください

于 2012-11-20T11:26:59.463 に答える
0

- - - - アップデート - - -

import pygame
from pygame.locals import *
from PIL import Image
import ImageTk
import Tkinter

# load image in pygame
pygame.init()
surf = pygame.image.load('pic_temp.png')         # you can use any Surface a Camers is also an Surface
mode = "RGB"
# export as string / import to PIL
image_str = pygame.image.tostring(surf, mode)         # use 'RGB' to export
size      = (640, 480)
#image    = Image.fromstring(mode, size, image_str) 
# use frombuffer() - fromstring() is no longer supported
image     = Image.frombuffer(mode, size, image_str, 'raw', mode, 0, 1) # use 'RGB' to import

# create Tk window/widgets
root      = Tkinter.Tk()
tkimage   = ImageTk.PhotoImage(image) # use ImageTk.PhotoImage class instead
label     = Tkinter.Label(root, image=tkimage)
label.pack()
root.mainloop()
于 2018-01-30T11:09:21.863 に答える