Python Tkinter轨迹窗口是否专门调整大小?
我正在写一个小程序,当窗口大小改变时,它打算运行一个调整大小的方法。出于这个原因,我使用了Python Tkinter轨迹窗口是否专门调整大小?,python,events,tkinter,window-resize,Python,Events,Tkinter,Window Resize,我正在写一个小程序,当窗口大小改变时,它打算运行一个调整大小的方法。出于这个原因,我使用了toplevel.bind(“,self.resize)。虽然这确实适用于调整大小,但该方法会被调用数百次:在滚动时,在使用某些按钮时,即使窗口大小不会随这些操作的任何一个而改变。如何绑定事件,使其仅在更改窗口大小时被调用 import tkinter as tk def resize(event): print("widget", event.widget) print("height"
toplevel.bind(“,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()
尽管窗口上只有一个画布加上滚动条,但在用户更改与窗口交互之前,resize事件会被调用7次。当窗口确实被调整大小时,我如何停止这种疯狂行为并只调用resize函数?:
:
小部件更改了大小(或位置,在某些平台上)。新的大小在传递给回调的事件对象的宽度和高度属性中提供
当您运行代码时,它将在窗口中绘制这些小部件,因此窗口的宽度和高度将改变。
您可以使用if
语句检查Toplevel
的宽度和高度是否已更改
更改函数size
并初始化代码中的全局变量:
def resize(event):
global window_width, window_height
if event.widget.widgetName == "toplevel":
if (window_width != event.width) and (window_height != event.height):
window_width, window_height = event.width,event.height
print(f"The width of Toplevel is {window_width} and the height of Toplevel is {window_height}")
window_width, window_height = 0, 0
如果使用类(OOP),则可以避免
global
varibale。本文中的解释可能会有所帮助。
def resize(event):
global window_width, window_height
if event.widget.widgetName == "toplevel":
if (window_width != event.width) and (window_height != event.height):
window_width, window_height = event.width,event.height
print(f"The width of Toplevel is {window_width} and the height of Toplevel is {window_height}")
window_width, window_height = 0, 0