Tkinter帆布&滚动条与网格

时间:2017-11-07 07:49:57

标签: python tkinter grid scrollbar tkinter-canvas

我在画框中有画布

photoFrame = Frame(centerFrame, width=250, height=190, bg="#EBEBEB")
photoFrame.grid(row=0, column=1, sticky="nsew")
photoCanvas = Canvas(photoFrame, bg="#EBEBEB")
photoCanvas.grid(row=0, column=0, sticky="nsew")

我尝试用这个

将滚动条放到我的画布上
photoScroll = Scrollbar(photoFrame, orient=VERTICAL)
photoScroll.config(command=photoCanvas.yview)
photoCanvas.config(yscrollcommand=photoScroll.set)
photoScroll.grid(row=0, column=1, sticky="ns")

滚动条出现但已被禁用。你能帮帮我吗?

抱歉我的英语不好。

在for循环中,我添加了大量带有此代码的Image按钮

element = Button(photoCanvas, image = listPhotos[i], borderwidth=0, height = 200, width = 200, bg="#EBEBEB")
element.grid(row=rowPhoto, column=columnPhoto, padx=5, pady=5, sticky="nsew")

最后我有这个

    root = Tk()    
    photoFrame = Frame(root, width=250, height=190, bg="#EBEBEB")


    photoCanvas = Canvas(photoFrame, bg="#EBEBEB")
    photoCanvas.grid(row=0, column=0, sticky="nsew")

    for i in range(0, len(listPhotos), 1):
       element = Button(photoCanvas, image = listPhotos[i], borderwidth=0, height = 200, width = 200, bg="#EBEBEB")
       element.grid(row=rowPhoto, column=columnPhoto, padx=5, pady=5, sticky="nsew")

    photoScroll=Scrollbar(photoFrame,orient=VERTICAL)
    photoScroll.config(command=photoCanvas.yview)
    photoCanvas.config(yscrollcommand=photoScroll.set)
    photoScroll.grid(row=0, column=1, sticky="ns")

在我的应用中,紫色矩形是下一帧,我需要一个垂直滚动条 enter image description here

说你是否有一些问题

1 个答案:

答案 0 :(得分:1)

滚动一组小部件的一种方法是将它们(grid的{​​{1}})放在一个框架中,并将此框架放在画布中。

滚动工作的两个关键元素(除了连接滚动条到画布之外)是:

  • 使用pack将画面放在画布内,以便将其视为画布项目。
  • 每次使用canvas.create_window(x, y, window=frame)更改框架大小(例如添加新小部件后)时,更新画布滚动区域。

以下是对Python Tkinter scrollbar for frame问题代码的修改,但使用OP问题中的小部件名称和canvas.configure(scrollregion=canvas.bbox('all'))代替grid

pack