2017-07-19 5 views
0

キャンバスにスクロールバーを実装しようとしていますが、フレーム上で即座にスクロールできないことを知っています。私はそれを現れさせることはできますが、実際にはそれを働かせることはできません。私はまだPythonとtkinterについては初心者ですが、この問題の以前の投稿はそれほど助けにはなりませんでした。私は含まれていないこと、ウィジェットの残りのグリッドを使用する必要がキャンバスにスクロールバー

from tkinter import * 

class myApp(): 
    def __init__(self,root): 
     myApp.f2=Frame(root) 
     myApp.f2.pack() 
     myApp.canv=Canvas(self.f2) 
     myApp.canv.pack() 
     myApp.f1=Frame(self.canv) 
     myApp.f1.pack(side=LEFT, fill=BOTH, expand=TRUE) 
     myApp.scroll=Scrollbar(self.f1,orient=VERTICAL, 
     command=myApp.canv.yview) 
     myApp.scroll.grid(row=0,column=6) 
     myApp.canv.config(yscrollcommand=myApp.scroll.set) 

:ここでは(私もその考えられています悪い習慣をやった私は何か他のものについてのアドバイスに開いている)私のコードですここに。

+0

キャンバスの孫(フレーム 'f1')を奇妙なものにしようとしています。通常、スクロールバーとそのスクロールされたウィジェットは兄弟です。また、通常は '.grid()'や '.pack()'を使って子供をキャンバスに追加することはありません。実際にスクロールする子を作成するには '.add_window()'を使う必要があります。 – jasonharper

答えて

0

バインドの仕組みが分かりませんが、ここではToplevelのスクロールバーに使用するコードですが、それは私のものではありませんが、私が見つけた場所は覚えていません(私はそれがstackoverflowあなたは何かを見つけるだろうと確信しています)。それが動作するはずですが、あなたは

Toplevel = tk.Toplevel(self) 

    #create canvas to make a scrollbar 
    canvas = tk.Canvas(Toplevel, borderwidth=0) 
    #create frame which will contains your widgets 
    frame = tk.Frame(canvas) 

    #create and pack your vsb to the Toplevel and link it to the canvas yview 
    vsb = tk.Scrollbar(Toplevel, orient="vertical", command=canvas.yview) 
    canvas.configure(yscrollcommand=vsb.set) 
    vsb.pack(side="right", fill="y") 
    canvas.pack(side="left", fill="both", expand=True) 
    canvas.create_window((5,5), window=frame, anchor="nw") 


    #i don't understand this line 
    frame.bind("<Configure>", lambda event, canvas=canvas: canvas.configure(scrollregion=canvas.bbox("all"))) 

    #add your widgets to the frame 
    ... 

PSけれどもあなたは、マウスでそれを置く場合にのみ、バーをスクロールすることができますすることができますfrom tkinter import *を使用しないでください(となります)名前の衝突を持って、使用import tkinterまたはimport tkinter as tk

編集:this questionが私のソースです。

関連する問題