我在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的背景图像与飞机的背景图像同时存在。
答案 0 :(得分:0)
根据大家的回答,我知道错误是因为没有图片的参考,所以我可以通过修改以下内容来解决问题。
self.ari_bg1 = ImageTk.PhotoImage(image_ari1)
self.ari_bg2 = ImageTk.PhotoImage(image_ari2)
保持自我引用