2016-05-09 19 views
0

Ich habe versucht, scrollbar in eine Canvas, die eine LabelFrame hat und einfach einige Button drin, aber ich kann nicht scheint, dass die Bildlaufleiste funktioniert.Python Tkinter Scrollbar funktioniert nicht

Ist es möglich, nicht Klasse zu verwenden, da ich noch neu in der Programmierung bin.

Hier den Code:

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) 

Antwort

0

Sie können ein Objekt nicht bewegen mit grid auf die Leinwand hinzugefügt. Sie müssen create_window verwenden, um den labelframe in der Zeichenfläche zu platzieren.