0

无法完成动态 QMenu 树。
结构和格式是完美的,但仍然缺少的是在触发结束动作时返回所有分支名称。

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

在添加大量冗长的代码片段之前 - 从概念化问题开始似乎最好,以防有一些(明显的)意味着我忽略了。

例子; 基于页脚图的理想回报将类似于...

  • 上图:

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

  • 中图:

    '批处理结果' - 'testBatch_vr3' - 'Run-1' - '预算结果'

  • 底部图片:

    '单一结果' - 'testBatch_vr3' - 'Run-3' - '粒子轨迹'

在此处输入图像描述

切中要害;

触发结束动作时,如何检索多级 QMenus 集中的所有名称?

4

1 回答 1

0

以下复杂的位解决了我的问题。这样做可能有点晦涩难懂(从菜单悬停信号以搜索字典菜单条目)-但现在效果很好。

# 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()
于 2015-05-14T14:51:58.050 回答