2017-01-23 160 views
0

關於我的tkinter畫布上滾動條位置的問題。我有一個3個畫布小部件的框架。禮貌to this post的想法。我添加了一個水平滾動條,每個畫布有一個50 +列500+行熊貓數據框。負載不是很快,但這不是一個目標。tkinter將滾動條放在畫布上的底部位置

新行將被添加到每個數據框的底部。這個新行需要驗證。因此,如果滾動條或畫布顯示底部部分,而不是每次都向下滾動,則會很好。

請參閱下面的代碼,其中定義了3x畫布和3x滾動條(x + y)。

def createBox(window): 
    list_ = ['df1', 'df2', 'df3'] # 3 dataframes 

    for i in range(3): 
      mybox = LabelFrame(window, padx=5, pady=4) 
      mybox.grid(row=i, column=0) 
      createWindow(mybox, list_[i], i) 

def createWindow(box, lt_actual, i): 
    canvas = Canvas(box, borderwidth=0) 
    frame = Frame(canvas) 
      vsbY = Scrollbar(box, orient="vertical", command=canvas.yview) 
      canvas.configure(yscrollcommand=vsbY.set, width=1200, heigh=200) 
      vsbY.pack(side="right", fill="y") 

      vsbX = Scrollbar(box, orient="horizontal", command=canvas.xview) 
      canvas.configure(xscrollcommand=vsbX.set, width=1200, heigh=200)  
      vsbX.pack(side="bottom", fill="x") 

    #canvas.yview_moveto(1) - no effect 
    #canvas.yview_moveto(1.0) - no effect 

    canvas.pack(side="left", fill="both", expand=True) 
    canvas.create_window((4,4), window=frame, anchor="nw", tags="frame") 

    # be sure that we call OnFrameConfigure on the right canvas 
    frame.bind("<Configure>", lambda event, canvas=canvas: OnFrameConfigure(canvas)) 

我讀了這個論壇,並就一些info (effbot) pages,我應該使用moveTo()/ yview_moveto()命令選項,但到目前爲止,這似乎並沒有工作。

問題1.我應該將y滾動條放到底部還是應該將畫布視圖放到底部。

問題2.你能提供一些關於如何使用moveto的指導,或者我應該採用不同的方法嗎?

非常感謝!

回答

0

畫布的yview_moveto方法確實是使用正確的函數。它的參數是你想要離屏的畫布總高度的一部分。所以使用0作爲參數顯示畫布的頂部和1,底部。

import tkinter as tk 

root = tk.Tk() 

canvas = tk.Canvas(root) 
canvas.grid(row=0, column=0) 
canvas.create_oval(0, 0, 20, 20, fill='red') 
canvas.create_oval(0, 800, 20, 820, fill='blue') 

ys = tk.Scrollbar(root, orient='vertical', command=canvas.yview) 
ys.grid(row=0, column=1, sticky='ns') 
# configure scrolling 
canvas.configure(yscrollcommand=ys.set, scrollregion=canvas.bbox('all')) 
# show bottom of canvas 
canvas.yview_moveto(1) 

root.mainloop() 

順便說一句,我沒有看到把Y型滾動條的底部或將畫布視圖的底部,因爲這兩個鏈接之間的任何差別。但我猜想你想知道是使用滾動條還是畫布的方法來做到這一點,並且我給出了上面的答案。

+0

@ l_4321謝謝。這確實是一個工作的例子。稍後會檢查我的代碼有什麼問題。但我會對我的錯誤提供反饋。日Thnx。 –