2016-05-09 31 views
0

LabelFrameを持つCanvasの中にスクロールバーを入れようとしていますが、その中にはButtonという単純なものがありますが、スクロールバーが動作しないようです。Python Tkinterスクロールバーが動作しない

私はまだプログラミングに新しいので、クラスを使用しないことは可能ですか?ここで

コード:

def all_alb(): 
    global allAlbum 
    global all_albwin 
    global lg 

    all_albwin = Toplevel() 
    all_albwin.state('zoomed') 
    ctr = 0 
    alb_row = 0 
    alb_cover = PhotoImage(file="img/placeholder.gif") 

    scrollbar = Scrollbar(all_albwin) 
    scrollbar.pack(side=RIGHT, fill=Y) 

    container = Canvas(all_albwin, yscrollcommand=scrollbar.set, scrollregion=(0,0,1000,1000)) 

    # I do nothing scrollbar-related here 

    if lg == 1: 
     btnAdd = Button(container, text="Add New Album", command=add_alb) 
     btnAdd.grid(row=0) 

    btnMain = Button(container, text="Back to Main Menu", command=all_albwin.destroy) 
    btnMain.grid(row=1) 

    all_frame = LabelFrame(container, text="All Album", padx=10, pady=10) 
    all_frame.grid(padx=15, pady=15, row=2) 

    file = open("album/allAlbum.txt", "r") 
    total = file.readline() 
    file.close() 

    if int(total) == 0: 
     status = Label(all_frame, text="No album found.") 
     status.grid(row=0) 

    else: 
     while ctr < int(total): 
      file = open("album/alb_info/" + allAlbum[ctr].replace("\n", "") + ".txt", "r") 
      coverDir = file.readline().replace("\n", "") 
      coverImg = PhotoImage(file=coverDir) 

      cover = Button(all_frame, image=coverImg, bd=0, command=lambda ctr=ctr: alb_info(ctr, "all_alb")) 
      cover.image = coverImg 
      cover.grid(row=alb_row, column=0, pady=20) 

      alb_name = Button(all_frame, text=allAlbum[ctr].replace("\n", ""), font = "Helvetica 16 bold", command=lambda ctr=ctr: alb_info(ctr, "all_alb"), bd=0) 
      alb_name.grid(row=alb_row, column=1, sticky=NW, padx=20, pady=20) 

      ctr = ctr + 1 
      alb_row = alb_row + 1 

    # Scrollbar stuff under here 
    container.pack(expand=True) 
    scrollbar.config(command=container.yview) 

答えて

0

あなたはgridをキャンバスに追加したオブジェクトをスクロールすることはできません。キャンバス内にlabelframeを配置するには、create_windowを使用する必要があります。

関連する問題