保持 tkinter 画布原点居中

Posted

技术标签:

【中文标题】保持 tkinter 画布原点居中【英文标题】:Keeping a tkinter canvas origin centered 【发布时间】: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() 调用。 【参考方案1】:

是否可以在不将 Configure 事件处理程序绑定到画布的情况下保持可调整大小的 tkinter.canvas 的原点居中?

不,不是。

【讨论】:

以上是关于保持 tkinter 画布原点居中的主要内容,如果未能解决你的问题,请参考以下文章

使用tkinter.pack()始终使小部件居中

Python Tkinter - 保存画布 - tkinter 崩溃

tkinter:在画布上使用滚动条

为啥我的 Tkinter 画布显示?

画布上的 tkinter 菜单栏

带有网格的 tkinter 画布滚动条?