♪ canvas It's not enough to smash a view of it just like that. That's the case. bbox His contents will remain empty. scrollbaraccordingly, it will be considered that there is nothing to hide. We gotta go. canvas to create windowand put all the other things in it. Also, to intercept the event of a change in the window to count the razed region.import tkinter as tk
from tkinter import ttk
def def_add(): # создание строчек
global start_row
global row_num
global value
global posX
global posY
row_num += 1
start_row = tk.Label(dot_list, text=row_num, fg='#8F8F8F')
start_row.grid(row=row_num, column=0, sticky='n')
value = tk.Entry(dot_list)
value.grid(row=row_num, column=1, sticky='n')
value.insert(0, 'None')
posX = tk.Entry(dot_list)
posX.grid(row=row_num, column=2, sticky='n')
posX.insert(0, '0')
posX.config(validate="key", validatecommand=(reg, '%P'))
posY = tk.Entry(dot_list)
posY.grid(row=row_num, column=3, sticky='n')
posY.insert(0, '0')
posY.config(validate="key", validatecommand=(reg, '%P'))
def close():
root.destroy()
def update_scrollregion(event):
dot_canvas.configure(scrollregion=dot_canvas.bbox("all"))
def callback(input): # фильтр ввода
if input.find('e') != -1:
return False
try:
print(input+'1')
input = float(input+'1')
return True
except:
print('no')
return False
root = tk.Tk()
#root.resizable(False, False)
root.title('Canvas')
#root.attributes("-fullscreen", True)
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)
reg = root.register(callback)
c = tk.Canvas(root, bg='#F0F0F0')
c.grid(row=0, column=0, sticky='nsew')
frame = tk.Frame(root, bg='#F7F7F7') # головной фрейм
frame.grid(row=0, column=1, sticky='nsew')
frame.rowconfigure(0, weight=1)
dot_controls = tk.Frame(frame, bg='#F0F0F0') # подфрейм
dot_controls.grid(row=0, column=0, sticky='nswe', padx=40, pady=40, columnspan=2)
dot_controls.rowconfigure(0, weight=1)
dot_controls.columnconfigure(0, weight=1)
add = tk.Button(frame, text='Add', relief="flat")
add.grid(row=1, column=0, sticky='s', padx=10, pady=10)
add.config(command=def_add, width=10)
exit = tk.Button(frame, text='Close', relief="flat")
exit.grid(row=1, column=1, sticky='s', padx=10, pady=10)
exit.config(command=close, width=10)
dot_canvas = tk.Canvas(dot_controls, bg='#F0F0F0', highlightthickness=0) # холст в подфрейме
dot_canvas.grid(row=0, column=0, sticky="nsew")
canvas_frame = tk.Frame(dot_canvas, bg="#EBEBEB")
dot_canvas.create_window(0, 0, window=canvas_frame, anchor='nw')
scroll = ttk.Scrollbar(dot_controls, orient='vertical', command=dot_canvas.yview) # скроллбар
dot_canvas.config(yscrollcommand=scroll.set)
scroll.grid(row=0, column=1, sticky="ns")
canvas_frame.bind("<Configure>", update_scrollregion)
заголовок
row_num = 0
dot_list = canvas_frame
num = tk.Label(dot_list, text='№', fg='#8F8F8F')
num.grid(row=row_num, column=0)
value_head = tk.Label(dot_list, text='Name', fg='#8F8F8F')
value_head.grid(row=row_num, column=1)
X = tk.Label(dot_list, text='X', fg='#8F8F8F')
X.grid(row=row_num, column=2)
Y = tk.Label(dot_list, text='Y', fg='#8F8F8F')
Y.grid(row=row_num, column=3)
for _ in range(10):
def_add()
root.mainloop()