我是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()
答案 0 :(得分:0)
您需要在使用标签填充框架后通过在app.mainloop()
之前添加这两行来更新画布滚动区域:
canvas.update_idletasks()
canvas.config(scrollregion=canvas.bbox("all"))
需要调用update_idletasks
以确保在我们请求边界框之前更新画布内容。