2012-01-20 25 views
0

私はこの質問のいくつかのフォームが以前に他のフォーラムと同様にここで尋ねられていることを実感しました。私はそれらのすべてを読んだことがあり、それらの解決策に向かってそれぞれ数時間働いていますが、私はまだそれを手に入れません。その目標は、スクロール可能なキャンバスを含む新しいウィンドウ(Toplevel)で、そこにいくつかのコンテンツを含むフレームがありました。私はまだ仕事にキャンバス上にスクロールバーを取得することはできません。Tkinterのキャンバスにスクロールバー

 #make new window 
     self.edit_window = Tkinter.Toplevel() 
     self.edit_window.title("Data Refinement") 
     self.edit_window.maxsize(height='50', width='300') 

     #make scrollbar for canvas 
     cScrollbar = Tkinter.Scrollbar(self.edit_window) 
     cScrollbar.pack(side=Tkconstants.RIGHT, fill=Tkconstants.Y) 

     #make canvas 
     canvas = Tkinter.Canvas(self.edit_window) 

     #attach canvas to scrollbar 
     canvas.config(yscrollcommand=cScrollbar.set) 
     cScrollbar.config(command=canvas.yview) 

     #make frame and put everything in frame 
     frame = Tkinter.Frame(self.edit_window) 

     #random fill 
     Tkinter.Label(frame, text="Enter bounds for the parameters").pack() 
     Tkinter.Label(frame, text="Enter bounds for the parameters").pack() 
     Tkinter.Label(frame, text="Enter bounds for the parameters").pack() 
     Tkinter.Label(frame, text="Enter bounds for the parameters").pack() 
     Tkinter.Label(frame, text="Enter bounds for the parameters").pack() 
     Tkinter.Label(frame, text="Enter bounds for the parameters").pack() 

     #scrollbar for listbox 
     scrollbar = Tkinter.Scrollbar(frame) 
     scrollbar.pack(side=Tkconstants.RIGHT, fill=Tkconstants.Y) 

     listbox = Tkinter.Listbox(frame) 
     listbox.pack() 

     #insert some random data for now into listbox 
     for i in range(100): 
      listbox.insert(Tkconstants.END, i) 

     # attach listbox to scrollbar 
     listbox.config(yscrollcommand=scrollbar.set) 
     scrollbar.config(command=listbox.yview) 

     #pack and attach to canvas 
     frame.pack(fill=Tkconstants.BOTH, expand=Tkconstants.YES) 
     canvas.create_window(0,0, anchor = Tkconstants.NW, window = frame) 

     canvas.pack(fill=Tkconstants.BOTH, expand=Tkconstants.YES) 
     canvas.config(scrollregion=canvas.bbox(Tkconstants.ALL)) 

ので、フレームが正常内容で作られています。フレームはキャンバスに正常に添付されます。私が得られないことは、キャンバスに接続されているものが表示されているのに実際には動作しない間に、リストボックスに付いたスクロールバーが機能することです。スクロールバーは、すべてが既に表示されているように動作します。それは、キャンバスの内容全体をスクロールするのではなく、目に見えるものをスクロールするようなものです。

+0

私はそれがリストボックスではなく、キャンバスでは何をしているのか誰にも分かりますか?私はオンラインからのスクロールキャンバスの例を続けていますが、私は同じ問題を抱えています....これはとても恐ろしいです。 – user926914

答えて

1

私は今検証しているコンピュータではありませんが、私の推測はこれです。フレームの高さは、ウィジェットがマップされるまで1になります。その時点で、その内容に合わせて拡大または縮小します。ただし、スクロール領域が実質的にゼロになるようにキャンバススクロール領域を設定する前に、キャンバススクロール領域を設定しています。これを確認するには、コマンドの結果を出力してください。

スクロール領域を設定する前にself.update_idletasksに電話をかけてみてください。

+0

恐ろしく、それはself.edit_window.update_idletasks()を呼び出すことで直しました。 – user926914