2017-01-23 28 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)) 

私はこのフォーラムに、私はのmoveTo()/ yview_moveto()コマンドのオプションを使用する必要がありますが、これまでのところ、これは動作していないよういくつかのinfo (effbot) pagesで読みます。

質問1. yスクロールバーを下に配置するか、キャンバスビューを下に配置する必要があります。

質問2. movetoの使い方に関するガイダンスを提供できますか、別の方法をとるべきですか?

ありがとうございます!

答えて

0

キャンバスのyview_moveto方法は、実際に使用する権利機能です。その引数は、オフスクリーンにしたいキャンバスの全高の割合です。引数として0を使用すると、キャンバスの上端と下端が表示されます。ところで

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() 

2がリンクされているので、私は下へのyスクロールバーを置くか、下にキャンバスビューを置くことの間に違いが表示されません。しかし、スクロールバーやキャンバスの方法を使用するかどうかを知りたいと思っていましたが、私は上記の答えを出しました。

+0

@ l_4321ありがとうございました。これは確かに実用的な例です。後で自分のコードに何が間違っているかを調べます。しかし私は間違いについてのフィードバックを提供します。 Thnx。 –

関連する問題