2017-05-02 65 views
0

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

你只需要app.mainloop()之前通過添加這兩條線填充標籤幀後更新畫布scrollregion:

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

是需要update_idletasks的調用,以確保畫布內容更新在我們要求邊界框之前。