2015-05-14 14 views
0

无法最终确定动态QMenu树。
结构和格式是完美的,但仍然缺少的是在触发结束操作时返回所有分支名称。Python和Qt:在多级QMenu中检索分支名称

我尝试过的任何解决方案的唯一实现是使用self.sender();它仅返回结束操作的名称。

之前增加一吨冗长的代码的剪 - 由概念化的问题似乎开始在最好的情况下,有一些(明显)是指我在看的。

示例; 基于页脚图中的理想的回报将是沿着线的东西...

  • 顶部图片:

    '单结果' - '团长结果'

  • 中图:

    'Batch Results' - 'testBatch_vr3' - '运行-1' - '预算结果'

  • 底部图片:

    '单结果' - 'testBatch_vr3' - '运行-3' - '粒子轨道'

enter image description here

给点;

在触发终止操作时,如何检索多级QMenus集合中的所有名称?

回答

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()