Я пишу небольшую программу, которая намерена запускать метод изменения размера при изменении размера окна. по этой причине я использовал toplevel.bind("<Configure>", self.resize)
. Хотя это работает для изменения размера, метод вызывается сотни раз: при прокрутке, при использовании некоторых кнопок, даже если размер окна не изменяется ни при одном из этих действий. Как привязать событие, чтобы оно вызывалось только при изменении размера окна?
import tkinter as tk
def resize(event):
print("widget", event.widget)
print("height", event.height, "width", event.width)
parent = tk.Toplevel()
canvas = tk.Canvas(parent)
scroll_y = tk.Scrollbar(parent, orient="vertical", command=canvas.yview)
scroll_x = tk.Scrollbar(parent, orient="horizontal", command=canvas.xview)
frame = tk.Frame(canvas)
# put the frame in the canvas
canvas.create_window(0, 0, anchor='nw', window=frame)
# make sure everything is displayed before configuring the scrollregion
canvas.update_idletasks()
canvas.configure(scrollregion=canvas.bbox('all'),
yscrollcommand=scroll_y.set,
xscrollcommand=scroll_x.set)
scroll_y.pack(fill='y', side='right')
scroll_x.pack(fill='x', side='bottom')
canvas.pack(fill='both', expand=True, side='left')
parent.bind("<Configure>", resize)
parent.mainloop()
Выход:
widget .!toplevel
height 200 width 200
widget .!toplevel.!scrollbar
height 286 width 17
widget .!toplevel.!scrollbar2
height 17 width 382
widget .!toplevel.!canvas
height 269 width 382
widget .!toplevel
height 286 width 399
widget .!toplevel
height 286 width 399
widget .!toplevel.!can
Несмотря на то, что в окне есть только один холст и полосы прокрутки, событие изменения размера вызывается 7 раз, прежде чем пользователь даже сможет взаимодействовать с окном. Как я могу остановить это безумие и вызывать функцию изменения размера только тогда, когда размер окна изменяется?