2017-01-23 3 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을 인수로 사용하면 캔버스의 맨 위와 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. –

관련 문제