отображение объектов за пределами frame
В canvas добавляются виджеты и когда их слишком много то можно просмотреть с помощью scrollbar, но при прокрутке эти виджеты закрывают верхнюю часть, и тогда отпадает возможность переключаться между вкладками. Я хочу, чтобы эти элементы пропадали за рамками фрейма, а не закрывали контент, но не знаю как сделать это.
код
import tkinter as tk
from tkinter import ttk
class Rows():
def __init__(self, row_place):
self.examle1 = tk.Entry(row_place, width=15)
self.examle1.grid(column=1, row=Window.row_num)
self.examle2 = tk.Entry(row_place, width=10)
self.examle2.grid(column=2, row=Window.row_num)
self.examle3 = tk.Entry(row_place, width=10)
self.examle3.grid(column=3, row=Window.row_num)
self.examle4 = tk.Entry(row_place, width=15)
self.examle4.grid(column=4, row=Window.row_num)
Window.row_num += 1
class Window():
row_list = []
row_num = 1
def __init__(self, geometry='700x600'):
self.window = tk.Tk()
self.window.title('yes')
self.window.geometry(geometry)
self.note = ttk.Notebook(self.window, height=600)
self.note.pack(fill = tk.BOTH, side=tk.TOP)
self.second_page = tk.Frame(self.window)
self.second_page.pack(fill = tk.BOTH)
self.first_page = tk.Frame(self.window)
self.first_page.pack(fill=tk.BOTH)
self.first_frame = tk.Frame(self.first_page, width=400)
self.first_frame.pack(fill=tk.BOTH, side=tk.LEFT)
self.first_frame.pack_propagate(False)
self.scr = ttk.Scrollbar(self.first_frame)
self.scr.pack(fill=tk.Y, side=tk.RIGHT)
self.canvas = tk.Canvas(self.first_frame, yscrollcommand=self.scr.set)
self.canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
self.scr.configure(command=self.canvas.yview)
self.canvas.bind('<Configure>', lambda e: self.canvas.configure(scrollregion=self.canvas.bbox('all')))
self.second_frame = tk.Frame()
self.canvas.create_window((0, 0), window=self.second_frame, anchor='nw')
self.row_add_button = tk.Button(self.first_page, text='добавить строку', width=100, command=self.add_row)
self.row_add_button.pack(side=tk.TOP)
self.note.add(self.first_page)
self.note.add(self.second_page)
def add_row(self):
Window.row_list.append(Rows(self.second_frame))
self.canvas.configure(scrollregion=self.canvas.bbox('all'))
if __name__ == '__main__':
window = Window()
window.window.mainloop()