Я думаю, вы должны использовать другой подход, попробуйте использовать больше виджета Canvas, подумайте, что это проще.
import tkinter as tk
def open_window(rect):
window.title('Rectangles')
print(rect)
x, y = 100, 50
for i in range(0, rect * 2):
if (i % 2) == 0:
l4 = tk.Label(canvas, text="Size of rectangle:")
canvas.create_window(0, y, window=l4, anchor=tk.NW)
en = tk.Entry(canvas)
canvas.create_window(x, y, window=en, anchor=tk.NW)
y += 20
canvas.configure(scrollregion=canvas.bbox("all"))
window = tk.Tk()
window.configure()
ws = window.winfo_screenwidth()
hs = window.winfo_screenheight()
w = 500 # width for the Tk root
h = 300 # height for the Tk root
x = (ws / 2) - (w / 2)
y = (hs / 2) - (h / 2)
window.geometry('%dx%d+%d+%d' % (w, h, x, y))
canvas = tk.Canvas(window, bg="black", width=500, height=300)
canvas.pack()
canvas_scroll = tk.Scrollbar(canvas, command=canvas.yview)
canvas_scroll.place(relx=1, rely=0, relheight=1, anchor=tk.NE)
canvas.configure(yscrollcommand=canvas_scroll.set, scrollregion=(0, 0, 500, 300))
rect_var = tk.IntVar()
entry_rect_number = tk.Entry(canvas, textvariable=rect_var)
canvas.create_window(0, 0, window=entry_rect_number, anchor=tk.NW)
sumbit_button = tk.Button(canvas, text="sumbit", command=lambda: open_window(rect_var.get()))
canvas.create_window(0, 20, window=sumbit_button, anchor=tk.NW)
# Here is the frame
canvas_frame1 = tk.Canvas(canvas, bg="red", width=150, height=290)
frame_scroll = tk.Scrollbar(canvas_frame1, command=canvas_frame1.yview)
frame_scroll.place(relx=1, rely=0, relheight=1, anchor=tk.NE)
canvas_frame1.configure(yscrollcommand=frame_scroll.set, scrollregion=(0, 0, 200, 400))
canvas_frame1.create_oval(0, 0, 50, 50)
canvas.create_window(250, 0, window=canvas_frame1, anchor=tk.NW)
canvas.bind_all('<MouseWheel>', lambda event: canvas.yview_scroll(int(-1*(event.delta/120)), "units"))
window.mainloop()
Я не знаю, есть ли способ прокрутки Frame
от main window
, но я советую создать Canvas
, где вы положите все свои widgets
и добавите scrollbar
к Canvas
так что все widgets
внутри Canvas
легко прокручиваются.
для получения дополнительной информации о Canvas
и всех его методах см. этот сайт