如何适当地适应滚动条?

时间:2017-05-02 12:14:30

标签: python-3.x tkinter scrollbar tkinter-canvas

我是tkinter和python3的新手。我一直致力于创建一个框架的滚动条,该框架是画布的子画面,也是Toplevel()的子画面。滚动条按钮功能很好,但条形/盒子本身从上到下伸展,无法移动。此外,使用滚动按钮,用户可以滚动超出内容(没有任何东西可以查看)。 这是代码。

#! /usr/bin/env python3

from tkinter import *
from filegroups import typeGroups

app = Tk()

types_window = Toplevel(app)
types_window.wm_title('Types')

yscrollbar = Scrollbar(types_window, orient=VERTICAL)
yscrollbar.grid(row=0, column=1, sticky=N+S)

canvas = Canvas(types_window,
                 width = 300, 
                 height = 500, 
                 yscrollcommand=yscrollbar.set)

canvas.grid(row=0,column=0)
canvas.config(scrollregion=canvas.bbox("all"))
yscrollbar.config(command=canvas.yview)

frame = Frame(canvas)

canvas.create_window(0,0,anchor=NW,window=frame)

for key in sorted(typeGroups.keys()):
    options_frame = LabelFrame(frame, text=key)
    options_frame.grid(padx=5, pady=10)
    for item in typeGroups[key]:
        item_button = Checkbutton(options_frame,
                                  text=item)
        item_button.grid()

app.mainloop()

1 个答案:

答案 0 :(得分:0)

您需要在使用标签填充框架后通过在app.mainloop()之前添加这两行来更新画布滚动区域:

canvas.update_idletasks()
canvas.config(scrollregion=canvas.bbox("all"))

需要调用update_idletasks以确保在我们请求边界框之前更新画布内容。