Perhaps somehow expose QMainWindow's add widget function via CPython?
I think you mean QMainWindow::setCentralWidget(). Since that is not a C++ virtual method, you can't override it in a class derived from QMainWindow. If what you are interested in doing is to use a central widget created in Python, then I think you could probably write a method in your own MainWindow class, call it something like "setMainWidget" and expose it via CPython.

I do not know what a QWidget created in Python "looks like" on the C++ side. If there is a way to convert it into a QWidget pointer, then you can pass that pointer into QMainWindow::setCentralWidget().