11

tkinterウィンドウで画像を描画するにはどうすればよいですか(Python 3.3を使用しています)?tkinterウィンドウの特定の位置に画像を描画するステートメントを探しています。

うん...

任意の回答をいただければ幸いです。そして、あなたがそれを必要とする場合に備えて、私がコードを使用したいプログラムのソースコード(それがそれと呼ばれることができるなら)はここにあります。

from tkinter import *

class craftClass():
    def __init__(self, x = 80, y = 80, xmotion = 0, ymotion = 0, health = 20):
        self.xPos, self.yPos = x, y
        self.dx, self.dy = xmotion, ymotion
    def moveCraft(self):
        self.xPos += self.dx
        self.yPos += self.dy

class missileClass():
    def __init__(self, x = 0 , y = 0):
        self.xPos, self.yPos = x, y

class alienClass():
    def __init__(self, x, y):
        self.xPos, self.yPos = x, y

    def moveForCraft(self, craftX, craftY):
        if self.xPos < craftX:
            self.xPos += 2
        elif self.xPos > craftX:
            self.xPos -= 2
        else:
            pass

    if self.yPos < craftY:
        self.yPos += 2
    elif self.yPos > craftY:
        self.yPos -= 2
    else:
        pass

craft = craftClass()
missileArray = []
alienArray = []

def keypress(event):
    if event.keysym == 'Escape':
        root.destroy()
x = event.char
if x == "w":
    craft.dy = 1
elif x == "s":
    craft.dy = -1
elif x == "a":
    craft.dx = -1
elif x == "d":
    craft.dx = 1
else:
    print(x)

root = Tk()
print(craft.dx)
while True:
try:
    root.bind_all('<Key>', keypress)
    craft.moveCraft()
    root.update()
except TclError:
    print("exited. tcl error thrown. llop broken")
    break

間隔がめちゃくちゃになっていることはよく知っていますが、それはコピー中に起こったことです

4

3 に答える 3

10

Canvas画像を指定された(x、y)位置に配置するには、ウィジェットを使用する必要があります。

Python 3では、次のように実行できます。

import tkinter

tk = tkinter.Tk()
can = tkinter.Canvas(tk)
can.pack()
img = tkinter.PhotoImg("<path/to/image_file>.gif")
can.create_image((x_coordinate, y_coordinate), img)

PILPython 3には公式の*リリースがないため、タイプの画像を読み取ることに制限されていることに注意してください。またはGIF、他のファイルタイプが必要な場合は、この回答を確認してください。PGMPPM

Canvasウィジェットは非常に強力であり、画像の配置、呼び出しによる画像の"canvas.update"表示、呼び出しによるアイテム表示の削除を行うことができ"canvas.delete(item_id)"ます。そのドキュメントを確認してください。

Tkinterは単純なゲームには十分なはずですがPygame、より良いマルチメディアサポート、あるいはPyglet 、あるいはKivyと呼ばれるさらに高レベルのマルチメディアフレームワークを検討することを検討してください。

*(更新):2015年の時点で、Pillowがあります。これは古いPILプロジェクトの代わりとなるフォークであり、Python3.xのサポートを含むプロジェクトの適切な開発を再開しました。

于 2012-09-03T21:55:32.133 に答える
3

この例では、キャンバスに画像を表示します。

from PIL import Image, ImageTk

PIL(Python Imaging Library)モジュールから、ImageモジュールとImageTkモジュールをインポートします。

self.img = Image.open("tatras.jpg") //your image name :)
self.tatras = ImageTk.PhotoImage(self.img)

Tkinterは内部でJPG画像をサポートしていません。回避策として、ImageモジュールとImageTkモジュールを使用します。

canvas = Canvas(self, width=self.img.size[0]+20,
    height=self.img.size[1]+20)

Canvasウィジェットを作成します。画像のサイズが考慮されます。実際の画像サイズよりも20px広く、20px高くなっています。

canvas.create_image(10, 10, anchor=NW, image=self.tatras)

参照:https ://tutorialspoint.com/python/tk_canvas.htm

于 2019-10-14T03:13:54.403 に答える
1

これはファイル形式に大きく依存します。TkinterにはPhotoImageクラスがありLabels、画像がである場合に非常に簡単に使用できます.gif。それらをキャンバスウィジェットにかなり簡単に追加することもできます。それ以外の場合は、PILを使用して画像をに変換することをお勧めしますPhotoImage

于 2012-09-03T14:58:24.210 に答える