保持 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 画布原点居中的主要内容,如果未能解决你的问题,请参考以下文章