Причина, по которой вы видите только «точку», заключается в том, что вы на самом деле видите пустое меню, поскольку вы создаете QActions без родителей.
QMenu.addAction(QAction*)
не передает владение QAction в меню (оно ведет себя как QWidget.addAction
, как объяснено здесь , поскольку QMenu является потомком QWidget), что означает, что как только метод _generate_menu()
вернется, эти действия «передаются» сборщику мусора в Python (он же удален).
Если по какой-либо причине вам действительно необходимо создать «автономные» QActions, добавить к ним родительский элемент (или сделать их свойством какого-либо персистентного объекта, даже путем добавления к другому постоянному объекту, например списку или кортежу) или просто используйте menu.addAction(str)
как указано MalloyDelacroix.
Кстати, если вы просто установите меню в качестве родителя, этого будет достаточно:
menu.addAction(QAction("Quit", menu))
При этом, по крайней мере, согласно вашему примеру, на самом деле нет необходимости использовать статический метод для этого.