#python #tkinter
#питон #tkinter #python
Вопрос:
Я пытаюсь написать скрипт, который изменяет размер моего изображения в соответствии с размером холста. Вот мой код:
from tkinter import *
import tkinter as tk
from tkinter import PhotoImage
root = tk.Tk()
canvas = tk.Canvas(root, bg="white", border=0)
canvas.pack(fill="both", expand=True)
HH = canvas.winfo_reqheight()
WW = canvas.winfo_reqwidth()
print(HH,WW)
img = PhotoImage(file="competeButton.png", master=root)
img = img.zoom(2,2)
panel = Label(canvas, image=img, borderwidth=0)
panel.pack(side="bottom", fill="both", expand="yes")
root.mainloop()
Как вы можете видеть, он устанавливает размер кнопки в соответствии с исходным размером окна. Но как мне обновить его в режиме реального времени? Я думаю, что это может быть связано с img.zoom.
Заранее большое спасибо за любую помощь.
Ответ №1:
Вы можете привязать функцию к <Configure>
событию виджета.
Вот пример, который печатает размер холста всякий раз, когда он меняется:
import tkinter as tk
def canvas_changed(event):
canvas.itemconfigure("dimensions", text=f"{event.width}x{event.height}")
root = tk.Tk()
canvas = tk.Canvas(root)
foo = canvas.create_text(10, 10, anchor="nw", text="foo", tags=("dimensions",))
canvas.bind("<Configure>", canvas_changed)
canvas.pack(fill="both", expand=True)
root.mainloop()
Комментарии:
1. Большое вам спасибо. У вас есть представление о том, как я могу сохранить измененную ширину и высоту в переменной?
2. @Haversine: Я не понимаю, что вы имеете в виду. Там нет ничего особенного. вам нужно сделать, просто сохраните его в переменной, как и все остальное. Вы можете либо сохранить то, что находится в
event.width
, либо результатcanvas.winfo_width()
.3. Я имею в виду, что, сохраняя его в переменной, я устанавливаю значение widht во что-то вроде «WW». таким образом, WW всегда будет содержать обновленную ширину окна
4. @Haversine: вы переоцениваете это.
global WW; WW=canvas.winfo_width()
приведетWW
к тому, что у вас всегда будет текущая ширина.