Если посмотреть в документацию метода addAction, то тамуказаны возможные сигнатры метода:
def addAction(self, *__args): # real signature unknown; restored from __doc__ with multiple overloads
"""
addAction(self, QAction)
addAction(self, str) -> QAction
addAction(self, QIcon, str) -> QAction
addAction(self, str, PYQT_SLOT, shortcut: Union[QKeySequence, QKeySequence.StandardKey, str, int] = 0) -> QAction
addAction(self, QIcon, str, PYQT_SLOT, shortcut: Union[QKeySequence, QKeySequence.StandardKey, str, int] = 0) -> QAction
"""
return QAction
Если сделать menu.addAction("Action"), то все работать будет.
При этом когда я создавал для программы menu bar, то способ аналогичны моему коду работал (возможно там другие настройки у экземпляра QMenu).
UPD: Нашел ошибку, проблема была в создании экземпляров QAction, при создании нужно передать значение для parent