【问题标题】:How to to fit scrollbar approriately?如何适当地适合滚动条?
【发布时间】:2017-05-02 12:14:30
【问题描述】:

我是 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()

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 2019-11-30
      相关资源
      最近更新 更多