Хорошо, у меня проблема, и я слишком долго пытался ее исправить. Я не знаю, как изменить размер изображения, не нарушая его макет. В случае (1) он заполняет все пространство, таким образом разрушая мой макет, и я думаю, что это потому, что я вызываю функцию configure
в функции, которая связана с событием <Configure>
. В случае (2) я могу изменить размер изображения, но у меня есть огромная граница вокруг масштабированного изображения, которая разрушает макет. Я даже пытался использовать Canvas
вместо Label
, но просто рисование Canvas
разрушает макет, потому что он занимает слишком много места и сдвигает все вправо.
Идеи, как исправить это?
from tkinter import *
from PIL import ImageTk, Image
global image_label, image_ref
def main():
global image_label
root = Tk()
root.geometry("600x400")
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
content_frame = Frame(root, bg="#FF0000")
content_frame.grid(row=0, column=0, sticky="news")
column_ratio = [10,25,10,45,10]
row_ratio = [10,80,10]
for col_idx in range(5):
content_frame.grid_columnconfigure(col_idx, weight=column_ratio[col_idx])
for row_idx in range(3):
content_frame.grid_rowconfigure(row_idx, weight=row_ratio[row_idx])
image_label = Label(content_frame, bg="#00FF00")
image_label.grid(row=1, column=1, sticky="news")
#image_label.bind("<Configure>", resize_configure) # <--- (1)
second_label = Label(content_frame, bg="#0000FF", text="Label on the right")
second_label.grid(row=1, column=3, sticky="news")
second_label.bind("<Button-1>", resize_click) # <--- (2)
root.mainloop()
def resize(size, label):
global image_ref
image = Image.open("test.png").resize(size, Image.ANTIALIAS)
image_ref = ImageTk.PhotoImage(image)
label.configure(image=image_ref)
def resize_configure(event):
global image_label
size = (event.width, event.height)
resize(size, image_label)
def resize_click(event):
global image_label
image_label.update()
size = (image_label.winfo_width(), image_label.winfo_height())
resize(size, image_label)
if __name__ == "__main__":
main()
Случай 1 как изображение
Случай 2 как изображение
Как это должен выглядеть как