【发布时间】:2021-03-15 21:54:18
【问题描述】:
是否可以在不将 Configure 事件处理程序绑定到画布的情况下保持可调整大小的 tkinter.canvas 的原点居中?我想实现与以下 python 脚本相同的结果,但不使用绑定。
找了两个小时就放弃了。有没有我想念的小部件选项?
import tkinter
from PIL import ImageTk
def centerCanvasOrigin(e):
root.update()
cnv.scan_dragto(round(cnv.winfo_width()/2), round(cnv.winfo_height()/2), 1)
root = tkinter.Tk()
cnv = tkinter.Canvas()
cnv.pack(fill = tkinter.BOTH, expand = 1)
cnv.bind("<Configure>", centerCanvasOrigin)
img = ImageTk.PhotoImage(file="img/image.png")
cnv.create_image(0, 0, image = img)
centerCanvasOrigin(True) #i know, sry about this :)
root.mainloop()
【问题讨论】:
-
这个documentation 描述了如何通过绑定鼠标事件进行快速滚动(参见
.scan_dragto()部分)。您也许可以使用类似的尺寸来确定尺寸。 -
我不想绑定任何东西。我发布的 python 代码完成了我想要的工作(使用 Configure 事件),但如果有除了 bind 之外的解决方案,我很感兴趣。
-
如果你想跟随鼠标的移动,你需要绑定鼠标事件……你有什么反对绑定的呢?也许这是XY Problem。
-
如果您有使用
bind的解决方案,那么您为什么不想使用bind? -
WRT 性能,我不相信你不需要
root.update()函数中的centerCanvasOrigin()调用。
标签: python tkinter canvas centering