簡體   English   中英

如何將圖像固定到Tkinter小部件的背景?

[英]How can I pin an image to the background of my Tkinter widget?

我制作了一個簡單的小部件,其背景可以自動調整為窗口的形狀。 到目前為止,我放置的圖像無法正確粘貼到所需的背景點。 誰能解釋我如何將圖像正確地固定在運動的背景而不是窗口上,對您有所幫助。

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()

根據討論,您的要求是將圖像相對於帶有背景圖像的父窗口放置在Vehicles()函數中。 在代碼中,您已經在Vehicles()函數中使用了label絕對定位:

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)

現在,圖像應根據父窗口的大小更改坐標。 確保您將絕對位置聲明替換為相對位置聲明,因為您不能同時擁有這兩個位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM