# 新建按钮
btn = QPushButton()
#新建菜单
menu = QMenu(btn)
menu.addAction(QAction('菜单项1', self))
# 设置按钮的上下文菜单策略为CustomContextMenu
btn.setContextMenuPolicy(3)
#设置3时,运行会报错则改成
btn.setContextMenuPolicy(Qt.CustomContextMenu)
#设置菜单出现位置
btn.customContextMenuRequested.connect(lambda pos, btn=btn: menu.exec_(btn.mapToGlobal(pos)))
大体思路如上。踩坑的地方就是策略设置为3,改成Qt.CustomContextMenu