小部件右键单击会弹出错误的位置

时间:2018-07-24 05:16:19

标签: python pyqt pyqt5

我向嵌入QTableWidget的窗口小部件添加了右键单击操作。当我单击右键时,QMenu出现在错误的位置。这是我的代码:

我在QTableWidget中添加了小部件:

        tableWidget = self._dlg.tableWidget
        variableLabel = QLabel()
        variableLabel.setText(str(var))
        variableLabel.setContextMenuPolicy(Qt.CustomContextMenu)
        variableLabel.customContextMenuRequested.connect(self.showMenu)
        tableWidget.setCellWidget(row, 0, variableLabel)

这里是showMenu:

def showMenu(self, pos):
    print("pos", str(pos))
    menu = QMenu()
    applyAction = menu.addAction("Tümüne Uygula")
    action = menu.exec_(self._dlg.mapToGlobal(pos))
    if action == applyAction:
    ...

最后,这是我的结果,当我单击彩色单元格(QLabel)时,菜单显示如下:

enter image description here

1 个答案:

答案 0 :(得分:1)

customContextMenuRequested发送的位置相对于发布它的小部件,在您的情况下,它与QLabel相关,假设showMenu()属于我们可以使用{{1 }}方法来获取它。

sender()

如果def showMenu(self, pos): menu = QMenu() applyAction = menu.addAction("Tümüne Uygula") action = menu.exec_(self.sender().mapToGlobal(pos)) if action == applyAction: 不属于小部件,则必须使用showMenu()显式传递标签

functools.partial