Tkinter如何创建图像?

时间:2019-01-12 11:00:20

标签: tkinter

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

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

请注意地图中的 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()

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

1 个答案:

答案 0 :(得分:0)

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

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

保持自我引用