0

我在尝试设置带有背景图像的窗口时使用 tkinter。在某些过程中,我有一个用复选框填充的框架,因此我创建了一个滚动条,以便用户可以看到所有选项。问题是滚动条也会移动画布的背景图像。有没有办法可以修复图像不移动或以某种方式自行移动框架。

代码是

def canvasScroll():
    canvas = gui.createCanvas() 
    fFrame = gui.createNewFrame()

    scrollbar = Scrollbar(root, orient="vertical", command=canvas.yview)
    canvas.configure(yscrollcommand = scrollbar.set)
    scrollbar.pack(side="right", fill="y")
    canvas.pack(side="left", fill="both", expand= True)
    canvas.create_window((150,50),window = fFrame, anchor='nw', tags = "frame")
    gOb.change_canvas(canvas)
    fFrame.bind("<Configure>", gui.scroll)

    gOb.change_scrollbar(scrollbar)
    gOb.change_frame(fFrame)

def createCanvas():
    canvas = Canvas(root,height = _h, width = _w,highlightthickness = 0)
    canvas.pack(side='top',fill='both',expand='yes')
    canvas.create_image(-200,-200,image=bground,anchor='nw')  
    return canvas
def createNewFrame():
    frame = Frame(root,height = _h, width = _w,background='white')
    frame.pack()
    return frame

澄清一下,这些家伙都是类名 gui 的一部分,而 gOb 是一个包含多个 gui 对象的对象。

4

1 回答 1

0

这是一个想法 - 它有点笨拙,但它会起作用。每次滚动条滚动时,移动背景图像的位置,使其看起来保持在同一个位置:

标记您的图像,以便您以后可以访问它:

canvas.create_image(-200,-200,image=bground,anchor='nw',tags="background")
#                                                       ^^^^^^^^^^^^^^^^^

让您的滚动条调用您定义的函数:

scrollbar = Scrollbar(root, orient="vertical", command=scrollCallback)

定义你的滚动回调:

def scrollCallback(*args):
    canvas.yview(*args)
    # Arrange for your background image to move so it appears to stay in the same position as the canvas scrolls.
于 2013-10-22T02:19:20.153 回答