试图弄清楚 Tkinter Canvas 包中的缩放方法是如何工作的。
import tkinter
root = tkinter.Tk()
root.geometry("1200x800")
root.resizable(False,False)
root.title("Examples")
myCanvas = tkinter.Canvas(root, bg="white", height=700, width=1000)
myCanvas.create_rectangle(0,200,300,300, tags="myTag")
myCanvas.scale("myTag", 8200,1200,0.99,0.99)
myCanvas.create_rectangle(0,400,300,300, tags="myTag2")
myCanvas.move("myTag2",200,0)
input_elem = tkinter.Entry(root,width=50)
input_elem.grid(row=1, column=0)
btn = tkinter.Button(root,width=50, text="here", height=5)
btn.grid(row=1, column=2)
myCanvas.grid(row=0, column=0)
root.mainloop()
in the 文档 https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/canvas-methods.html我找到了这个:
.scale(tagOrId, xOffset, yOffset, xScale, yScale) 缩放所有对象
根据它们距点的距离 P=(xOffset, yOffset)。这
比例因子 xScale 和 yScale 基于值 1.0,其中
意味着没有缩放。 tagOrId 选择的对象中的每个点都是
移动,使其距 P 的 x 距离乘以 xScale 和 y
距离乘以 yScale。
此方法不会更改文本项的大小,但可能会移动它。
基于此,我预计.scale()
以与画布相同的单位(默认像素)工作,但似乎并非如此。我的xOffset
值相当大,矩形仅移动很小。因此,我创建了第二个矩形进行比较,并意识到它是根据画布的宽度进行缩放的,因此:
myCanvas.scale("myTag", (20*0.99)*1000,1200,0.99,0.99)
myCanvas.move("myTag2",(0.99*200),0)
等于相同的 xOffset。为什么缩放比例是 10 倍呢?不应该(200*0.99)*1000
在缩放方法中等于0.99*200
在移动方法中?或者有人可以指出我更详细的文档吗?