2016-10-17 25 views
0

create_windowフレームオブジェクトが下部のself.containerウィンドウを超えてスクロールバーを開始しないのはなぜですか?Python Tkinter Canvas多くcreate_window()スクロールバーでスクロールしない項目

私が理解していることは、ウィジェットがcreate_windowを使用してキャンバスに埋め込まれている場合、スクロール可能であることです。コンテキストの場合、私はスクロールフレームを作成したくありません - すべてのウィジェットをフレームに入れて、そのフレームをキャンバスに追加するにはcreate_windowを使用してください - これらのフレームオブジェクトをキャンバスに移動し、能力。 Effbotによると、ウィジェットの上に他のキャンバスアイテムを描画することはできません。、私はスクロールフレームを持っていれば、その上にウィジェットを置くことはできません。

したがって、多くのcreate_windowオブジェクトを含むキャンバスをスクロールするには、どうしたらよいですか?

import tkinter as tk 

class Canvas_Scrollbar_CreateWindow(tk.Frame): 

    def __init__(self, parent): 
    tk.Frame.__init__(self, parent) 
    self.parent = parent 
    self.parent.columnconfigure(0, weight=1) 
    self.grid_columnconfigure(0, weight=1) 

    self.block_count = 0 

    self.button = tk.Button(self, text='Add', command=self.addblock) 
    self.button.grid(row=0, column=0, columnspan=2, sticky='new') 

    self.container = tk.Frame(self) 
    self.container.grid(row=1, column=0, sticky='nsew') 

    self.canvas = tk.Canvas(self.container, width=200, height=450) 
    self.scrollbar = tk.Scrollbar(self.container, 
            orient='vertical',command=self.canvas.yview) 
    self.canvas.config(yscrollcommand=self.scrollbar.set) 
    self.canvas.grid(row=0, column=0, sticky='nsew') 
    self.scrollbar.grid(row=0, column=1, sticky='nse') 

    self.container.bind('<Configure>', self.handle_scroll) 

    def addblock(self): 
    self.block = tk.Frame(self.canvas, bd=1, relief='solid') 
    self.block.columnconfigure(0, weight=1) 
    self.canvas.create_window((0, (self.block_count*25)), 
           window=self.block, anchor="nw", 
           width=200, height=24) 
    self.block_count += 1 

    def handle_scroll(self, event): 
    self.canvas.configure(scrollregion=self.canvas.bbox("all")) 

root = tk.Tk() 
app = Canvas_Scrollbar_CreateWindow(root) 
app.grid(row=0, column=0, sticky='ew') 
root.mainloop() 

tkinter create_window scrollbar

+0

ウィジェットの上にオブジェクトを描画することについてのご意見はありません。あなたはフレームを使用しないことの正当性としてそれを使用していますが、描画しているウィジェットもウィジェットであるため、それらの上にオブジェクトを描画することはできません。 –

答えて

1

キャンバスに項目を追加するときに、scrollregion再設定する必要があります。

関連する問題