-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscrollable_frame.py
26 lines (20 loc) · 1.19 KB
/
scrollable_frame.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# scrollable_frame.py
import tkinter as tk
# main window class to provide display area with scrollbars
class ScrollableFrame(tk.Frame):
def __init__(self, parent, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
# create canvas to host scrollbar
self.canvas = tk.Canvas(self, bg="lightgray")
self.scrollbar = tk.Scrollbar(self, orient="vertical", command=self.canvas.yview)
self.scrollable_frame = tk.Frame(self.canvas, bg="lightgray")
self.canvas.create_window((0, 0), window=self.scrollable_frame, anchor="nw")
self.canvas.configure(yscrollcommand=self.scrollbar.set)
# define layout
self.scrollbar.pack(side="right", fill="y")
self.canvas.pack(side="left", fill="both", expand=True)
# Allow the scrollable_frame to expand properly in width
self.scrollable_frame.bind("<Configure>", lambda e: self.canvas.configure(scrollregion=self.canvas.bbox("all")))
self.canvas.bind("<Configure>", lambda e: self.canvas.itemconfig(self.canvas.create_window((0, 0), window=self.scrollable_frame, anchor="nw", width=e.width)))
def get_scrollable_frame(self):
return self.scrollable_frame