在Python上显示背景的麻烦。画布

时间:2017-08-19 12:20:52

标签: python canvas tkinter background

from tkinter import *

WIDTH = 800
HEIGHT = 950
RAD = 20
SPEED = 30

class mainHero():
    def __init__(self):
        self.image = PhotoImage(file="darth_vader.png")
        self.imageSize = [112,180]
        self.right_side = WIDTH/2+self.imageSize[0]/2
        self.left_side = WIDTH/2-self.imageSize[0]/2
        self.obj = canv.create_image((WIDTH/2,HEIGHT-self.imageSize[0]/2), image = self.image)
    def move(self, event):
        if event.keysym == "Right":
            if self.right_side+SPEED<WIDTH:
                canv.move(self.obj, SPEED, 0)
                self.right_side += SPEED
                self.left_side += SPEED
        if event.keysym == "Left":
            if self.left_side-SPEED>0:
                canv.move(self.obj, -SPEED, 0)
                self.right_side -= SPEED
                self.left_side -= SPEED
        print(self.left_side, self.right_side)

root = Tk()
root.title("YeGame")
root.minsize(width = WIDTH, height = HEIGHT)
root.maxsize(width = WIDTH, height = HEIGHT)
canv = Canvas(root,width =WIDTH,height = HEIGHT, bg="green")
canv.create_rectangle(0, 0, WIDTH%SPEED-1, HEIGHT, fill = "yellow")
canv.create_rectangle(WIDTH-WIDTH%SPEED+1, 0, WIDTH, HEIGHT, fill = "yellow")
m = canv.create_image((100,100), image = PhotoImage(file="smallnight.gif"))
canv.pack()
canv.focus_set()
me = mainHero()
canv.bind("<KeyPress>", me.move)
root.mainloop()

此代码应该创建游戏。但我不明白为什么我可以在Canvas上看到Darth Vader但却看不到Canvas的背景。它应该是空间的形象。添加Darth Vader的代码可以使用,但添加背景的代码不起作用。请告诉我如何以正确的方式做到这一点。 Photo

1 个答案:

答案 0 :(得分:1)

应该在调用create_image之前声明图像,就像上面为Vader先生所做的那样:

root = Tk()
root.title("YeGame")
root.minsize(width = WIDTH, height = HEIGHT)
root.maxsize(width = WIDTH, height = HEIGHT)
canv = Canvas(root,width =WIDTH,height = HEIGHT, bg="green")
canv.create_rectangle(0, 0, WIDTH%SPEED-1, HEIGHT, fill = "yellow")
canv.create_rectangle(WIDTH-WIDTH%SPEED+1, 0, WIDTH, HEIGHT, fill = "yellow")
background = PhotoImage(file="smallnight.gif")
m = canv.create_image((100,100), image = background)
canv.pack()
canv.focus_set()
me = mainHero()
canv.bind("<KeyPress>", me.move)
root.mainloop()