Python和Qt:在多级QMenu中检索分支名称

Python和Qt:在多级QMenu中检索分支名称,qt,dynamic,pyqt,sender,qmenu,Qt,Dynamic,Pyqt,Sender,Qmenu,在完成动态QMenu树时遇到问题。 结构和格式都很完美,但仍然缺少的是在触发结束操作时返回所有分支名称 我尝试过的唯一一种解决方案是使用self.sender();它只返回结束操作的名称 在添加大量冗长的代码片段之前——从概念化这个问题开始似乎是最好的,以防有一些(明显的)意味着我看过头了 榜样; 以页脚数字为基础的理想回报率应该是 顶部图像: “单一结果”-“主要结果” 中间图像: “批处理结果”-“testBatch_vr3”-“运行1”-“预算结果” 底部图像: “单一结果”-“test

在完成动态QMenu树时遇到问题。
结构和格式都很完美,但仍然缺少的是在触发结束操作时返回所有分支名称

我尝试过的唯一一种解决方案是使用self.sender();它只返回结束操作的名称

在添加大量冗长的代码片段之前——从概念化这个问题开始似乎是最好的,以防有一些(明显的)意味着我看过头了

榜样; 以页脚数字为基础的理想回报率应该是

  • 顶部图像:

    “单一结果”-“主要结果”

  • 中间图像:

    “批处理结果”-“testBatch_vr3”-“运行1”-“预算结果”

  • 底部图像:

    “单一结果”-“testBatch_vr3”-“运行3”-“粒子轨迹”

切中要害


触发结束操作时,如何检索多级别qmenu集合中的所有名称?

以下复杂位解决了我的问题。这可能有点晦涩难懂(从菜单中悬停信号以搜索字典菜单项),但目前效果良好

# checks batch processing folder for existing directories and publishes the contents 
# into the batch results menu comboBox
def populateBatchResults(self):
    self.batchMenuDict = {}
    self.runMenuDict = {}
    self.runBatchResultsPopup.clear()
    self.batchDirNamesMenu.clear()
    batchModDir = self.estabBatchModelDir()
    for batch in os.listdir(batchModDir):
        fullBatchDir = batchModDir+str(batch)
        if os.path.isdir(fullBatchDir):
            self.batchMenuDict[batch] = QMenu(self.iface.mainWindow())
            self.batchMenuDict[batch].setTitle(str(batch))
            self.runBatchResultsPopup.addMenu(self.batchMenuDict[batch])
        for run in os.listdir(fullBatchDir):
            fullRunDir = fullBatchDir+'\\'+str(run)
            if os.path.isdir(fullRunDir):
                self.runMenuDict[run] = QMenu(self.iface.mainWindow())
                self.runMenuDict[run].setTitle(str(run))
                self.batchMenuDict[batch].addMenu(self.runMenuDict[run])
                self.runMenuDict[run].hovered.connect(self.assertBatchMenuSelection)

# get all current cursor hovered menu names
def assertBatchMenuSelection(self):
    self.selectedBatch = self.runBatchResultsPopup.activeAction().text()
    self.selectedRun = self.batchMenuDict.get(self.selectedBatch).activeAction().text()
    self.selectedAction = self.runMenuDict.get(self.selectedRun).activeAction().text()