Thank you for your excellent tutorial. It is really helpful.
In your first real example code, the size of mainframe does not follow the
main window size when it is changed. (I am using Python code)
I think columnconfigure / rowconfigure messages should be sent to the root window object
rather than the mainframe object, like
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
Regards,