使用 Tkinter 网格管理器将背景图像调整为 window 大小
Resize background image to window size with Tkinter grid manager
我不知道如何使用 tkinter 网格管理器将背景图像调整为 window 大小。我的图像是单独调整大小,没有调整 window。它与包管理器一起使用,但我想与网格管理器一起使用。
from tkinter import *
from PIL import Image, ImageTk
root = Tk()
root.title("Title")
root.geometry("800x600")
class Example(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.grid(sticky=N+S+E+W)
self.image = Image.open("courbe.gif")
self.img_copy= self.image.copy()
self.background_image = ImageTk.PhotoImage(self.image)
self.background = Label(self, image=self.background_image)
self.background.grid(row =0, column =0,sticky="nsew")
self.background.grid_rowconfigure(0, weight=1)
self.background.grid_columnconfigure(0, weight=1)
self.background.bind('<Configure>', self._resize_image)
def _resize_image(self,event):
new_width = event.width
new_height = event.height
self.image = self.img_copy.resize((new_width, new_height))
self.background_image = ImageTk.PhotoImage(self.image)
self.background.configure(image = self.background_image)
e = Example(root)
e.grid(row =0, column =0,sticky="nsew")
e.grid_rowconfigure(0, weight=1)
e.grid_columnconfigure(0, weight=1)
root.mainloop()
你不应该绑定到背景变化,而是 window (master
) 变化。然后你可以使用 master.winfo_width()
和 master.winfo_height()
.
获得 window 的新高度和宽度
所以在你的__init__
中使用
self.master = master
self.master.bind('<Configure>', self._resize_image)
并在您的self._resize_image
中使用
new_width = self.master.winfo_width()
new_height = self.master.winfo_height()
我不知道如何使用 tkinter 网格管理器将背景图像调整为 window 大小。我的图像是单独调整大小,没有调整 window。它与包管理器一起使用,但我想与网格管理器一起使用。
from tkinter import *
from PIL import Image, ImageTk
root = Tk()
root.title("Title")
root.geometry("800x600")
class Example(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.grid(sticky=N+S+E+W)
self.image = Image.open("courbe.gif")
self.img_copy= self.image.copy()
self.background_image = ImageTk.PhotoImage(self.image)
self.background = Label(self, image=self.background_image)
self.background.grid(row =0, column =0,sticky="nsew")
self.background.grid_rowconfigure(0, weight=1)
self.background.grid_columnconfigure(0, weight=1)
self.background.bind('<Configure>', self._resize_image)
def _resize_image(self,event):
new_width = event.width
new_height = event.height
self.image = self.img_copy.resize((new_width, new_height))
self.background_image = ImageTk.PhotoImage(self.image)
self.background.configure(image = self.background_image)
e = Example(root)
e.grid(row =0, column =0,sticky="nsew")
e.grid_rowconfigure(0, weight=1)
e.grid_columnconfigure(0, weight=1)
root.mainloop()
你不应该绑定到背景变化,而是 window (master
) 变化。然后你可以使用 master.winfo_width()
和 master.winfo_height()
.
所以在你的__init__
中使用
self.master = master
self.master.bind('<Configure>', self._resize_image)
并在您的self._resize_image
中使用
new_width = self.master.winfo_width()
new_height = self.master.winfo_height()