Tkinter如何创建图像?

Tkinter如何创建图像?,tkinter,Tkinter,我在Map类中初始化了一张图片,我不知道为什么,没有显示 我想完成一个飞机游戏, 这需要一个Map类和一个Planet类。我希望地图的背景图像与飞机的背景图像共存,但失败了 请注意地图中的init函数 # -*- coding: utf-8 -*- from Tkinter import * from PIL import Image,ImageTk BG_W=852 BG_H=480 BG_C="green" class Map(object): def __init__(sel

我在Map类中初始化了一张图片,我不知道为什么,没有显示

我想完成一个飞机游戏, 这需要一个Map类和一个Planet类。我希望地图的背景图像与飞机的背景图像共存,但失败了

请注意地图中的init函数

# -*- coding: utf-8 -*-

from Tkinter import *
from PIL import Image,ImageTk

BG_W=852
BG_H=480
BG_C="green"

class Map(object):
    def __init__(self):
        self.tk=Tk()
        self.tk.geometry("852x480")
        self.tk.title("aircraft")
        self.tk.resizable(width=False, height=False)
        self.cv=Canvas(self.tk, bg=BG_C, height=BG_H, width=BG_W)
        image1=Image.open("material/background.png")
        bg_image = ImageTk.PhotoImage(image1)
        self.bg=self.cv.create_image(427,240,image=bg_image)
        self.cv.pack()
        # self.tk.mainloop()
        #self.cv.create_image(426, 400,image=ari_image)

    def set_bg(self):
        self.cv.delete(self.bg)
        image1 = Image.open("material/background.png")
        bg_image = ImageTk.PhotoImage(image1)
        bg=self.cv.create_image(427, 240, image=bg_image)
        self.cv.pack()
        return bg

class Aircraft(object):
    def __init__(self):
        self._map=Map()
        image1 = Image.open("material/hero1.png")
        ari_image1 = ImageTk.PhotoImage(image1)
        #===================================================
        image2 = Image.open("material/hero2.png")
        ari_image2 = ImageTk.PhotoImage(image2)
        self.bgs=[ari_image1,ari_image2]
        self.bg_count=len(self.bgs)
        self.now_bg = 0
        self.now_bg_view = self._map.cv.create_image(426,280,image=self.bgs[self.now_bg])

    def start_game(self):
        self.run()
        self._map.tk.mainloop()

    def run(self):
        self.set_bg()
        self._map.cv.after(200,self.run)

    def select_bg(self):
        pass

    def set_bg(self):
        self.del_bg()
        self.now_bg +=1
        if self.now_bg >= self.bg_count:
            self.now_bg=0
        self.now_bg_view=self._map.cv.create_image(426,400,image=self.bgs[self.now_bg])

    def del_bg(self):
        self._map.cv.delete(self.now_bg_view)


def app():
    ari=Aircraft()
    ari.start_game()


if __name__ == '__main__':
    app()

我希望地图的背景图像与飞机的背景图像同时存在。

根据大家的回答,我知道错误是因为没有参考图片,所以我可以通过修改以下内容来解决问题

self.ari_bg1 = ImageTk.PhotoImage(image_ari1)
self.ari_bg2 = ImageTk.PhotoImage(image_ari2)

使用self保留引用

看起来您在地图类中没有像在飞机类中那样保留对图像的引用是的,我似乎指出这是问题所在,但我没有找到合适的解决方案。您说“但是失败了”。你为什么认为你失败了?该计划所做的与您期望的不同之处是什么?它会崩溃吗?它是否显示了错误的图像?图像是空白的吗?谢谢你的回答,程序没有崩溃,但没有按预期显示游戏背景图像,只显示飞机的背景图像。