I'm new to tkinter and I don't quite get it yet. I want to creat a scrollable table on a canvas using labels in a grid. I've seen some examples using the pack-manager which leads to even more chaos in my ui so I figured I'd rather stick with grid. However regardless of how many cells I choose the canvas and frame expand accordingly to display all cells hence leaving no scrollable region. How do I deal with this problem?
Any help is greatly appreciated. Many thanks in advance.
import tkinter as tk
def start_gui():
main_window = MainWindow()
main_window.set_grid(20,4)
main_window.root.mainloop()
class MainWindow:
def __init__(self, root = tk.Tk()):
self.root = root
self.root.title('Some Table')
self.frame = tk.Frame(root, width=100, height=100)
self.frame.grid(row = 0, column = 0)
self.canvas = tk.Canvas(self.frame, width = 100, height = 100)
self.canvas.configure(scrollregion=(0, 0, 0, 1000))
self.canvas.grid(row = 0, column = 0)
self.vbar = tk.Scrollbar(self.frame, orient = 'vertical', command= self.canvas.yview)
self.vbar.grid(row = 0, column = 1, sticky = 'ns')
self.canvas.config(yscrollcommand = self.vbar.set)
def set_grid(self, rows, columns):
for i in range(rows):
for j in range(columns):
label = tk.Label(self.canvas, text = 'some label', relief = 'solid', width = 20)
label.grid(row = i, column = j)
if __name__ == '__main__':
start_gui()
canvas.create_window(..., window=label)and removelabel.grid()- or put Frame to Canvas (create_window) and then put Labels in Frame