我试图让tkinter.Frame
有一个全屏图像,下面有一些按钮
WIDTH, HEIGHT = 800, 600
root = Tk()
mainframe = Frame(root, padding="3 3 12 12")
mainframe.pack(fill=BOTH, expand=True)
infovariable = StringVar()
infovariable_label = Label(mainframe, textvariable=infovariable, anchor=S)
infovariable_label.pack(fill=X, side=TOP)
label = Label(mainframe)
label.pack(fill=BOTH, expand=True)
image_base = Image.open('hello.jpg')
# setting the photo
image = (image_base
.resize(2500, 1000)
.crop(0, 0, WIDTH,HEIGHT))
label.configure(image=photo)
当我调整窗口大小时,如果我这样做,我希望我的照片尺寸(宽度/高度)相同:
def onResize(event):
global WIDTH, HEIGHT
WIDTH = event.width
HEIGHT = max(0, event.height - 50)
# setting the photo
image = (image_base
.resize(2500, 1000)
.crop(0, 0, WIDTH,HEIGHT))
root.bind('<Configure>', onResize)
调整大小,使图像改变大小,然后再次调用调整大小,有一个无限调整大小的窗口。
我和这个帖子有同样的问题:
答案 0 :(得分:2)
当您绑定到根窗口时,由于tkinter如何使用绑定标记,该绑定也适用于根窗口的每个子窗口。
解决方案的一部分是将onResize
更改为仅在event.widget
代表根窗口时更改图像的大小。可能还有其他问题,但这是第一个问题。
您还需要确保考虑边框。如果您使图像的大小与窗口大小相同,但标签有一个像素边框,则会导致标签增长,从而导致根窗口增长,这将重新开始整个过程。
与绑定标记相关的另一个答案是:https://stackoverflow.com/a/2538611/271577