Python 制作一个图像作为窗口的背景,并且仍然能够将按钮和其他控件放在上面

Python 制作一个图像作为窗口的背景,并且仍然能够将按钮和其他控件放在上面,python,python-2.7,tkinter,Python,Python 2.7,Tkinter,我需要一种方法,使一个图像作为一个窗口的背景,仍然能够把按钮和其他控制在它上面 这是我的代码: from __future__ import division from Tkinter import * from PIL import Image, ImageTk, ImageFilter import random import Tkinter as tk class MyGame(object): def __init__(self): self.root=

我需要一种方法,使一个图像作为一个窗口的背景,仍然能够把按钮和其他控制在它上面

这是我的代码:

from __future__ import division
from Tkinter import *
from PIL import Image, ImageTk, ImageFilter
import random
import Tkinter as tk

class MyGame(object):




    def __init__(self):
        self.root=Tk()
        self.root.wm_title("Working Tittle")

        img = Image.open("azure.PNG").convert("L") # convert changes the color to grey etc
        (w, h) = (img.size[1], img.size[1])
        print (w, h)
        tkpi = ImageTk.PhotoImage(img)
        label = Label (self.root, image =tkpi)
        label.grid(row=0, column=0, padx=5, pady=5)
        img2 =img.copy()
        pixels = img2.load()
        for x in range(w):
            for y in range(h):
                pixels[x,y] = 255


        tkpi = ImageTk.PhotoImage(img)
        label = Label (self.root, image =tkpi)
        label.grid(row=0, column=0, padx=5, pady=5)







        #this is for the canvas
        self.canvas = Canvas(self.root, width=200, height=200,bg="blue")
        self.canvas.pack()
        self.rectangle = self.canvas.create_rectangle(1, 210,250, 130, fill='green', outline='green')
        self.rectangle = self.canvas.create_rectangle(100, 180, 160, 100, fill='grey', outline='grey')
        self.oval = self.canvas.create_oval(2,2,40,40, fill ='yellow', outline='yellow')
        points = [92, 101, 168, 101, 129, 77]
        self.polygon = self.canvas.create_polygon( points,fill ='brown', outline='brown')

        # used for the coordinates
        self.canvas.bind("<B1-Motion>",self.button_click)
        self.root.mainloop()

        # this is used to find the coordinate
    def button_click(self, e):
        self.canvas.coords(self.polygon, e.x, e.y)
        print "%d %d" %(e.x,e.y)




MyGame()
来自未来进口部的

从Tkinter进口*
从PIL导入图像、ImageTk、ImageFilter
随机输入
将Tkinter作为tk导入
类MyGame(对象):
定义初始化(自):
self.root=Tk()
self.root.wm_标题(“工作标题”)
img=Image.open(“azure.PNG”).convert(“L”)#convert将颜色更改为灰色等
(w,h)=(img.size[1],img.size[1])
打印(w,h)
tkpi=ImageTk.PhotoImage(img)
标签=标签(self.root,image=tkpi)
label.grid(行=0,列=0,padx=5,pady=5)
img2=img.copy()
像素=img2.load()
对于范围(w)内的x:
对于范围(h)内的y:
像素[x,y]=255
tkpi=ImageTk.PhotoImage(img)
标签=标签(self.root,image=tkpi)
label.grid(行=0,列=0,padx=5,pady=5)
#这是给画布的
self.canvas=canvas(self.root,宽度=200,高度=200,bg=“蓝色”)
self.canvas.pack()
self.rectangle=self.canvas.create_矩形(121250130,fill='green',outline='green'))
self.rectangle=self.canvas.create_矩形(100180160100,fill='grey',outline='grey'))
self.oval=self.canvas.create_oval(2,2,40,40,fill='yellow',outline='yellow')
分数=[92,101,168,101,129,77]
self.polygon=self.canvas.create_polygon(点,fill='brown',outline='brown')
#用于坐标
self.canvas.bind(“,self.button\u单击)
self.root.mainloop()
#这用于查找坐标
def按钮_单击(自身,e):
self.canvas.coords(self.polygon,e.x,e.y)
打印“%d%d%”(e.x,e.y)
我的游戏()

我通常这样做的方法是a)用您想要的图像创建一个标签作为背景,b)使用
place
将图像放置在包含图像的框架中。这样,您就可以像往常一样继续在帧中打包或栅格化对象

例如:

self.image = tk.PhotoImage(...)
label = tk.Label(self,image=self.image)
label.place(x=0, y=0, relwidth=1.0, relheight=1.0, anchor="nw")

那么,你的代码有什么问题吗?对不起,每次我运行我的程序都没有发生任何事情,它没有打开窗口,它只是在没有任何结果的情况下执行。我尝试使用您的代码,但不断得到一个运行时错误:告诉它要尽早创建image@user1744316:这意味着在创建
Tk
的实例之前,您正在尝试创建一个映像。您需要在开始使用Tkinter的功能之前初始化它。