2012-01-20 83 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,直到小部件被映射爲止,此時它將增長或縮小以適應其內容。但是,在這種情況發生之前,您正在設置畫布滾動區域,所以滾動區域實際上爲零。您可以通過打印出命令的結果來驗證這一點canvas.bbox(Tkconstants.ALL)

嘗試在配置滾動區域之前添加對self.update_idletasks的調用,看看是否修復該問題。

+0

真棒,就是這樣,調用self.edit_window.update_idletasks()修​​復它。 – user926914