After some searches from the internet, I found what you need.
Note: Everything below is not mine, all the source I will put below.
So, this is what you need:
# Create A Main frame main_frame = Frame(root) main_frame.pack(fill=BOTH, expand=1) # Create Frame for X Scrollbar sec = Frame(main_frame) sec.pack(fill=X, side=BOTTOM) # Create A Canvas my_canvas = Canvas(main_frame) my_canvas.pack(side=LEFT, fill=BOTH, expand=1) # Add A Scrollbars to Canvas scrollbar = ttk.Scrollbar(main_frame, orient=VERTICAL, command=my_canvas.yview) scrollbar.pack(side=RIGHT, fill=Y) # Configure the canvas my_canvas.configure(yscrollcommand=scrollbar.set) my_canvas.bind("<Configure>", lambda e: my_canvas.config(scrollregion=my_canvas.bbox(ALL))) # Create Another Frame INSIDE the Canvas second_frame = Frame(my_canvas) # Add that New Frame a Window In The Canvas my_canvas.create_window((0, 0), window=second_frame, anchor="nw")
and the full code is:
from tkinter import * from tkinter import ttk all_files = [str(i) for i in range(100)] # your list root = Tk() # Create A Main frame main_frame = Frame(root) main_frame.pack(fill=BOTH, expand=1) # Create Frame for X Scrollbar sec = Frame(main_frame) sec.pack(fill=X, side=BOTTOM) # Create A Canvas my_canvas = Canvas(main_frame) my_canvas.pack(side=LEFT, fill=BOTH, expand=1) # Add A Scrollbars to Canvas scrollbar = ttk.Scrollbar(main_frame, orient=VERTICAL, command=my_canvas.yview) scrollbar.pack(side=RIGHT, fill=Y) # Configure the canvas my_canvas.configure(yscrollcommand=scrollbar.set) my_canvas.bind("<Configure>", lambda e: my_canvas.config(scrollregion=my_canvas.bbox(ALL))) # Create Another Frame INSIDE the Canvas second_frame = Frame(my_canvas) # Add that New Frame a Window In The Canvas my_canvas.create_window((0, 0), window=second_frame, anchor="nw") #========== l = [] for checkBoxName in all_files: var = IntVar() c = Checkbutton(second_frame, text=checkBoxName, variable=var, onvalue=1, offvalue=0) c.pack() l.append(var) #========== root.mainloop()
There is also an another shorter way:
from tkinter import * from tkinter.tix import * all_files = [str(i) for i in range(100)] # your list root = Tk() frame = Frame(width="500",height="500") frame.pack() swin = ScrolledWindow(frame, width=500, height=500) swin.pack() win = swin.window #========== l = [] for checkBoxName in all_files: var = IntVar() c = Checkbutton(win, text=checkBoxName, variable=var, onvalue=1, offvalue=0) c.pack() l.append(var) #========== root.mainloop()
To be honest, I'm not too good at tkinter, and I just have a little experience about it, so I don't really understand how they could make this code.
Sources:
- First Way
- Video Tutorial (1st way)
- Another Way