python3 wx.TreeCtrl - 如何迭代几个级别

时间:2018-02-28 02:59:39

标签: python-3.x wxpython wxwidgets

我有一个treectrl结构,它是由我们市政府托管的开放数据集的外部搜索填充的。这些数据与营业执照有关,并使用Pandas和Sodapy进行申请。树的填充如下:

for index, row in results_df.iterrows():
        tradename = row['tradename']
        address = row['address']
        licTypes = row['licencetypes']
        comm = row['comdistnm']
        jobSts = row['jobstatusdesc']
        jobCrt = row['jobcreated']
        lng = row['longitude']
        lng = str(lng)
        lat = row['latitude']
        lat = str(lat)

        # Populate Tree Controls with DataFrame values

        trdName = self.thrTree.AppendItem(root, tradename)
        self.thrTree.AppendItem(trdName, address)
        self.thrTree.AppendItem(trdName, licTypes)
        self.thrTree.AppendItem(trdName, comm)
        self.thrTree.AppendItem(trdName, jobSts)
        self.thrTree.AppendItem(trdName, jobCrt)
        self.thrTree.AppendItem(trdName, lng)
        self.thrTree.AppendItem(trdName, lat)

这将导致root的最终结构,然后是带有商业名称的节点1,并且当展开时,包含上面列出的所有信息,所以我假定根级别,然后是子节点1,然后是节点的child.child 1?甚至不确定如何调用第二秒缩进节点。 (我之前听过第三级使用的术语叶子)但是我离题了;我感兴趣的是获取业务所在位置的纬度和经度,然后允许用户根据他们的选择映射位置。我绑定了一个wx.EVT_TREE_ITEM_ACTIVATED,这样当用户双击商家名称获取详细信息时,我想抓住显示的项目。这就是我目前正在尝试迭代子节点的方式。

item = self.thrTree.GetSelection()

    while self.thrTree.GetItemParent(item):
        piece = self.thrTree.GetItemText(item)
        tmpHldr.insert(0, piece)
        item = self.thrTree.GetItemParent(item)

查看项目,它似乎是收集root下的所有商家名称,并忽略感兴趣的第三级项目。

我需要做些什么才能在树中更深入地获取所点击的业务下的详细信息,而不仅仅是根项目下的业务名称列表,称为“搜索结果”?

谢谢!

1 个答案:

答案 0 :(得分:0)

@YYC_Code,

你看了here吗? 这有可用于迭代的GetFirstChild()/ GetNextChild()对函数。它还具有ItemHasChildren()函数,您可以使用该函数来验证项目是否有任何子项,如果有,则使用上面提到的对。

编辑:

【引用】

对于此枚举函数,您必须传入一个'cookie'参数,该参数对于应用程序是不透明的,但是库必须使这些函数可重入(即允许同时在同一个对象上进行多个枚举)。传递给GetFirstChild和GetNextChild的cookie应该是相同的变量。

[/报价]

您需要确保在迭代过程中cookie参数相同。

你也应该这样做:

【引用】

如果没有其他子项,则返回无效的树项(即wx.TreeItemId.IsOk返回False)。

[/报价]