你可以通过绑定一个事件处理函数来做你想做的事情,这样每当root
窗口<Configure>
事件发生时它就会被调用。Label
这将允许您在根窗口移动或调整大小时更改附加图像的大小。
在下面的代码中,(Python Imaging Library) 的Pillow fork 用于调整图像大小,因为它不提供原生方式。原始图像是单独存储的,所有需要进行的缩放都与它的大小相关。这可以防止错误累积和降低显示的图像。PIL
tkinter
Label
请注意,我还将您的更改from tkinter import *
为,因为 a和 aimport tkinter as tk
之间存在冲突。通常最好避免这种情况发生。tkinter.Image
PIL.Image
import *
from PIL import Image, ImageTk
import tkinter as tk
import time
DIMENSION = 800, 500
def config_callback(event):
global bg
window_w, window_h = root.winfo_width(), root.winfo_height()
# New height of image is original height * ratio of current to starting size of window.
new_height = round(orig_height * (window_h/DIMENSION[1]))
# Resize original image to this new size (without changing width).
bg = ImageTk.PhotoImage(orig_img.resize((orig_width, new_height), Image.ANTIALIAS))
background.config(image=bg)
root = tk.Tk()
#image_path = r'C:\Users\Hunter\Desktop\school 1\module\pbm\bg.png'
image_path = r'.\bkgr.png'
orig_img = Image.open(image_path)
orig_width, orig_height = orig_img.size
bg = ImageTk.PhotoImage(orig_img.resize((orig_width, orig_height), Image.ANTIALIAS))
background = tk.Label(root, bd=0, image=bg)
background.place(x=0, y=0, relwidth=1, relheight=1)
root.geometry(f'{DIMENSION[0]}x{DIMENSION[1]}')
root.bind('<Configure>', config_callback) # Callback on window move/resize
root.mainloop()
这是一个屏幕截图,显示了它最初的样子:
这是另一个显示更改窗口高度后的样子: