首页 > 解决方案 > 如何获取调用 contextMenu() 的父小部件

问题描述

我有一个我正在调用 customContextMenu 的 treeWidget 。但我无法获得调用它的 widgetItem。

我尝试阅读文档但一无所获

树小部件:

self.treeWidget = QtWidgets.QTreeWidget(self.centralwidget)
self.treeWidget.headerItem().setText(0, "Database Explorer")
self.treeWidget.setContextMenuPolicy(Qt.CustomContextMenu)
self.treeWidget.customContextMenuRequested.connect(self.openMenu)

def openMenu(self,position):
        menu = QtWidgets.QMenu()
        deleteAction = menu.addAction("Delete")
        showAction = menu.addAction("Show")
        action = menu.exec_(self.treeWidget.mapToGlobal(position))
        if action == deleteAction:
            self.my_function(treeWidgetItemObject)

我想获取在 my_function() 中调用 contextMenu 的 treeWidgetItem 对象

标签: pythonpyqt5

解决方案


indexAt()如果要获取与itemAt()QTreeWidgetItem 按下或返回的项目关联的 QModelIndex,则必须使用

def openMenu(self,position):
        menu = QtWidgets.QMenu()
        deleteAction = menu.addAction("Delete")
        showAction = menu.addAction("Show")
        pos = self.treeWidget.viewport().mapToGlobal(position)
        action = menu.exec_(pos)
        if action == deleteAction:
            ix = self.treeWidget.indexAt(position)
            if ix.isValid():
                print(ix.data())
                it = self.treeWidget.itemFromIndex(ix)
                texts = [it.text(c) for c in range(it.columnCount())]
                print(texts)

推荐阅读