我一直在try 创建一个带有滑块和按钮的图形用户界面,输出图像位于右侧(而不是背景图像).要求仅图像根据窗口大小动态改变大小.
在我的try 中,只有在水平而不是垂直调整大小时,窗口才能正确地显示调整大小的图像.当窗口在垂直调整大小后被更新时,它将不正确地zoom 图像,导致图像的一部分被切断.
我并不希望保持像这样的窗口/屏幕比率: -Dynamically resize images in Tkinter
我使用的信息来自:
- Tkinter resize background image to window size个
- How to get tkinter canvas to dynamically resize to window width?个
- Dynamically resize widget's when resizing a window in tkinter个
和来自Codemy的YouTube视频,比如How To Resize A Window Dynamically - Python Tkinter GUI Tutorial #80
要获取此代码,请执行以下操作:
import tkinter as tk
from tkinter import *
from tkinter.filedialog import askopenfilename
from PIL import ImageTk, Image
def show_values():
print(slider1.get())
window = tk.Tk()
filename = askopenfilename() # show an "Open" dialog box and return the path to the selected file
image = ImageTk.PhotoImage(Image.open(filename))
imageWidth = image.width()
imageHeight = image.height()
canvas = Canvas(window, width=imageWidth, height=imageHeight)
canvas.pack(fill=BOTH, expand=True, side=RIGHT)
canvas.create_image(0, 0, image=image, anchor='nw')
slider1 = Scale(window, from_=0, to=42, orient='vertical')
slider1.pack(side=LEFT)
def resizer(e):
global image1, resized_image, new_image
image1 = Image.open(filename)
resized_image = image1.resize((e.width, e.height), Image.Resampling.LANCZOS)
new_image = ImageTk.PhotoImage(resized_image)
canvas.create_image(0, 0, image=new_image, anchor='nw')
window.bind('<Configure>', resizer)
Button(window, text='Process Image', command=show_values).pack(side=BOTTOM)
window.mainloop()
我也try 过使用加权网格和NSEW(N+S+E+W)方法,但没有成功.