如何使用 Tkinter 3 将按钮定位到 canvas,而不是屏幕

How do I position a button to a canvas, not to the screen using Tkinter 3

我有一张 canvas 的图片,我想将其用作背景。我的问题是,当我将按钮定位到正确的位置并尝试向下滚动时,按钮会随屏幕移动,而不是停留在 canvas 上我想要的位置。

    frame = Frame(self)
    frame.pack()

    mapImg = PhotoImage(file='Fo4-pip-map.png')
    canvas = Canvas(frame, width=2048, height=2048, scrollregion=(0,0,2048,2048))
    canvas.create_image(0,0, image=mapImg, anchor='nw')
    canvas.image = mapImg

    xscrollbar = Scrollbar(frame, orient=HORIZONTAL)
    xscrollbar.pack(side=BOTTOM, fill=X, anchor='s')
    yscrollbar = Scrollbar(frame, orient=VERTICAL)
    yscrollbar.pack(side=RIGHT, fill=Y, anchor='e')
    xscrollbar.config(command=canvas.xview)
    yscrollbar.config(command=canvas.yview)

    canvas.config(xscrollcommand=xscrollbar.set, yscrollcommand=yscrollbar.set)
    canvas.pack(side=LEFT, expand=True, fill=BOTH)


    vaultImg = PhotoImage(file='Vault.png')
    vaultImg = vaultImg.zoom(5)
    vaultImg = vaultImg.subsample(32)

    vault111Button = Button(canvas, width=30, height=30, borderwidth=0, image=vaultImg,
                            command=lambda: controller.show_frame('Vault111'))
    vault111Button.image = vaultImg
    vault111Button.place(x=150, y=100)

place 几何管理器将子项放置在距其父项固定偏移处 - 特别是 canvas 的滚动不适用于它们。摆脱最后一行,而是使用:

canvas.create_window(150, 100, window=vault111Button)