Python 如何将图像固定到Tkinter小部件的背景?

Python 如何将图像固定到Tkinter小部件的背景?,python,tkinter,python-imaging-library,Python,Tkinter,Python Imaging Library,我制作了一个简单的小部件,背景可以根据窗口的形状自动调整大小。到目前为止,我放置的图像没有正确地粘贴到所需的背景点。谁能解释一下我如何将图像正确地固定在移动的背景上,而不是窗口上,谢谢你的帮助 import turtle import tkinter as tk from tkinter import * from PIL import Image, ImageTk import webbrowser class App(Frame): def __init__(sel

我制作了一个简单的小部件,背景可以根据窗口的形状自动调整大小。到目前为止,我放置的图像没有正确地粘贴到所需的背景点。谁能解释一下我如何将图像正确地固定在移动的背景上,而不是窗口上,谢谢你的帮助

import turtle
import tkinter as tk
from tkinter import *
from PIL import Image, ImageTk
import webbrowser
     class App(Frame):
        def __init__(self, master, Buttons=None):
            Frame.__init__(self, master, Buttons)
            self.columnconfigure(0,weight=1)
            self.rowconfigure(0,weight=1)
            self.original = Image.open(r"C:\specific\image.gif")
            self.image = ImageTk.PhotoImage(self.original)
            self.display = Canvas(self, bd=0, highlightthickness=0)
            self.display.create_image(500, 500, image=self.image, anchor=NW, tags="IMG")
            self.display.grid(row=0, column=0, sticky=W+E+N+S)
            self.pack(fill='both', expand=True)
            self.bind("<Configure>", self.resize)
            self.Buttons()
            self.Vehicles()

        def resize(self, event):
            size = (event.width, event.height)
            resized = self.original.resize(size, Image.ANTIALIAS)
            self.image = ImageTk.PhotoImage(resized)
            self.display.delete("IMG")
            self.display.create_image(0, 0, image=self.image, anchor=NW, tags="IMG")

        def Buttons(self):
            self.VButton = tk.Button(master=self, text = "not relevant", font=('Arial, 8')) #, command = forward).pack(side = tk.LEFT)
            self.VButton.grid(row=0, column=2, sticky=N, columnspan=2)

            def qlink():
                webbrowser.open_new(r"http://172.16.0.926/big/")

            self.QButton = tk.Button(master=self, text = "not relevant", font=('Arial, 8'), command = qlink) 
            self.QButton.grid(row=0, column=2, sticky=NW, pady=30, columnspan=2)

            def Link():
                webbrowser.open_new(r"\\con\UserData\hello\Project\Vserver\file.html")

            self.GraphButton = tk.Button(master=self, font=('Arial, 8'), text = "not needed", command = Link) 
            self.GraphButton.grid(row=0, column=2, sticky=NW, pady=60, columnspan=2)

            self.HelpButton = tk.Button(master=self, font=('Arial, 8'), text = "also not relevant") #, command = forward).pack(side = tk.LEFT)
            self.HelpButton.grid(row=0, column=2, sticky=N, pady=90, columnspan=2)


        def Vehicles(self):
            width = 50
            height = 25
            image = Image.open(r"C:\specific\newimage.png")
            image =image.resize((width,height), Image.ANTIALIAS)
            photo = ImageTk.PhotoImage(image)
            label = Label(image=photo)
            label.image = photo
            label.place(x=500, y=600)



    root = Tk()
    app = App(root)
    app.mainloop()
导入海龟
将tkinter作为tk导入
从tkinter进口*
从PIL导入图像,ImageTk
导入网络浏览器
类应用程序(框架):
定义初始化(self、master、Buttons=None):
帧。\uuuu初始化(自、主、按钮)
self.columnconfigure(0,权重=1)
self.rowconfigure(0,权重=1)
self.original=Image.open(r“C:\specific\Image.gif”)
self.image=ImageTk.PhotoImage(self.original)
self.display=Canvas(self,bd=0,highlightthickness=0)
self.display.create_image(500500,image=self.image,anchor=NW,tags=“IMG”)
self.display.grid(行=0,列=0,粘性=W+E+N+S)
self.pack(fill='both',expand=True)
self.bind(“,self.resize)
self.Buttons()
自我保护车辆()
def调整大小(自身、事件):
大小=(event.width、event.height)
resized=self.original.resize(大小、图像、别名)
self.image=ImageTk.PhotoImage(已调整大小)
self.display.delete(“IMG”)
self.display.create_image(0,0,image=self.image,anchor=NW,tags=“IMG”)
def按钮(自):
self.VButton=tk.Button(master=self,text=“不相关”,font=('Arial,8'))#,command=forward.pack(side=tk.LEFT)
self.VButton.grid(行=0,列=2,粘滞=N,列跨度=2)
def qlink():
webbrowser.打开新的(r)http://172.16.0.926/big/")
self.QButton=tk.Button(master=self,text=“不相关”,font=('Arial,8'),command=qlink)
self.QButton.grid(行=0,列=2,粘滞=NW,pady=30,列跨度=2)
def Link():
webbrowser.open_new(r“\\con\UserData\hello\Project\Vserver\file.html”)
self.GraphButton=tk.Button(master=self,font=('Arial,8'),text=“不需要”,command=Link)
self.GraphButton.grid(行=0,列=2,粘滞=NW,pady=60,列跨度=2)
self.HelpButton=tk.Button(master=self,font=('Arial,8'),text=“也不相关”)#,command=forward.pack(side=tk.LEFT)
self.HelpButton.grid(行=0,列=2,粘滞=N,pady=90,列span=2)
def车辆(自):
宽度=50
高度=25
image=image.open(r“C:\specific\newimage.png”)
image=image.resize((宽度、高度)、image.ANTIALIAS)
photo=ImageTk.PhotoImage(图像)
标签=标签(图像=照片)
label.image=照片
标签位置(x=500,y=600)
root=Tk()
app=app(根目录)
app.mainloop()

根据讨论,您的要求是在
Vehicles()
函数中相对于带有背景图像的父窗口定位图像。在您的代码中,您已在
Vehicles()
功能中对
标签使用了绝对定位:

def Vehicles(self):
        #---code----           
        label.place(x=500, y=600)
您需要的是标签的相对定位,如下所示。我已经将图像定位到屏幕的中心作为示例。您可以根据需要通过更改
anchor
参数的值来更改此位置

def Vehicles(self):
        #---code----           
        label.place(relx=0.5, rely=0.5, anchor=CENTER)

图像现在应该根据父窗口的大小更改坐标。请确保将绝对位置语句替换为相对位置语句,因为这两个语句不能同时使用。

您的代码出现错误。你能同时包含导入内容吗?@amanb我已经做了更改,我将代码切碎,只包含相关部分-抱歉,直到出现错误:
AttributeError:“App”对象没有属性“Buttons”
@amanb我删除了按钮,因为它们与问题无关……我会将它们添加回去,我会在没有按钮的情况下使其正常工作,但不确定你所说的移动背景是什么意思。我只在窗口中看到一个图像,它会随着窗口的变化而调整大小。