2017-03-09 5 views
2

이전에 스크롤 가능한 캔버스를 만들었지 만 버튼으로 그 중 하나를 채워야하는 이유와 스크롤 막대가 비활성 상태 인 이유를 모르겠습니다. 아마도 문제는 캔버스입니다. 버튼이 포함되어 있습니까?캔버스 전체를 스크롤 할 수 없습니다.

그것은 캔버스와 스크롤이 제대로 vscrollbar.setcv.yview로 연결된 것으로 보인다 이후이 비활성 상태임을 이상한은 ... 브라이언의 대답에 따라

from Tkinter import * 

def main(): 

    root = Tk() 
    root.geometry("%dx%d+0+0" % (1800,1000)) 

    auxframe=Frame(root) 
    auxframe.pack(fill=BOTH, expand=YES) 

    cv = Canvas(auxframe, scrollregion=(0,0,8000,8000)) 
    vscrollbar = Scrollbar(auxframe, orient=VERTICAL) 
    vscrollbar.pack(fill=Y, side=RIGHT) 
    vscrollbar.config(command=cv.yview) 
    cv.config(yscrollcommand=vscrollbar.set) 
    cv.pack(side=LEFT, fill=BOTH, expand=TRUE) 

    memimages=[]  
    for row_index in range(8): 
     for col_index in range(8): 
      iconimage = PhotoImage(file="test.gif") 
      b=Button(cv,image=iconimage) 
      memimages.append(iconimage)    
      b.grid(row=row_index, column=col_index, sticky=N+S+E+W) 


    mainloop() 

main() 

(편집)

, 나는 그것이 추가하여 작동하게 이 - fcv는 압축되지 않습니다.

fcv=Frame(root) 
cv.create_window(0, 0, anchor = "nw", window=fcv) 

모든 버튼은 FCV의 자녀 : b=Button(fcv,image=iconimage) 난 여전히 문서 (예를 들어, infohost 또는 tutorialspot)이이 중요한 사실을 언급 나던 이유를 이해 해달라고

.

답변

1

캔버스는 pack, place 또는 grid을 통해 추가 된 개체를 스크롤하지 않습니다. 캔버스 메서드 create_window을 사용해야합니다.

일반적인 기술은 하나의 프레임을 만들 수 create_window을 사용하는 것입니다, 다음 사용할 수있는 프레임 내부에 배치 된 위젯에 pack, place, 또는 grid. 예를 보려면 Adding a scrollbar to a group of widgets in Tkinter

+0

나는 제안을 테스트했으며 제대로 작동합니다. 불행하게도, create_window를 사용하면 최대 크기와 관련된 다른 문제가 발생합니다. 여기 https://stackoverflow.com/questions/42830037/tkinter-maximum-canvas-size/42837629#42837629에서 질문했습니다. 네가 그것을 볼 수 있다면 멋질거야. – alessandro