2017-05-02 9 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()前に、これらの2行を追加することによって、ラベル付きのフレームを充填した後、キャンバスscrollregionを更新する必要があります。update_idletasksへの呼び出しがキャンバスのコンテンツが更新されることを保証するために必要とされる

canvas.update_idletasks() 
canvas.config(scrollregion=canvas.bbox("all")) 
私たちはバウンディングボックスを要求する前に。

関連する問題