代码之家  ›  专栏  ›  技术社区  ›  Son of a Beach

在tix-hlist清单中以编程方式折叠分支?

  •  0
  • Son of a Beach  · 技术社区  · 7 年前

    对于python中的第一个gui,我使用 Tix 对于其内置的“checklist”和“hlist”小部件,可以针对树的每个分支和叶构造带有复选框的树视图。它基本上运行良好。但是有一件事我还没有弄清楚,那就是如何以编程方式折叠树的分支。

    我希望在第一次显示清单时折叠一些分支,并且能够有一个按钮“全部折叠”和一个按钮“全部展开”。

    下面是我代码的清单部分。我希望 checkList.close(i["id"]) line可能会关闭分支,但它不会。

    有没有人能教我如何正确地以编程方式折叠tix checklist/hlist树中的分支?

    checkList = Tix.CheckList(win)
    checkList.pack(in_=frameTop, side=Tix.LEFT, fill=Tix.BOTH, expand=Tix.YES)
    checkList.hlist.config(bg='white', selectbackground='white', selectforeground='black', header=True, browsecmd=itemEvent)
    checkList.hlist.header_create(0, itemtype=Tix.TEXT, text='Select layers to add to the map', relief='flat')
    checkList.hlist.bind("<ButtonRelease-1>", checkListClicked)
    
    for i in items:
        try:
            checkList.hlist.add(i["id"], text=i["text"])
        except:
            print "WARNING:  Failed to add item to checklist:  {} - {}".format(i["id"], text=i["text"])
        checkList.close(i["id"])
        checkList.setstatus(i["id"], "off")
    
    checkList.autosetmode()
    

    我本以为以下几点会起作用(例如,在上述for循环内):

    checkList.setmode(i["id"], "close")
    checkList.close(i["id"])
    

    但它给了我错误, AttributeError: setmode 是的。这很奇怪,因为据我所知, setmode 应该有空,对吧?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Son of a Beach    6 年前

    我终于想出了一个办法让这件事发挥作用。我放弃了 setmode 完全因为它似乎对我的python环境不可用;然后因为我已经 autosetmode 在那里,我可以用 close 命令之后 自动设置模式 已经跑了。

    这意味着我必须在循环中运行两次,这感觉有点浪费,但这不是什么大问题,至少我现在可以得到我需要的结果。

    以下是我最后的收获。在本例中,我为每个具有父项的项将分支设置为closed(即,顶级项是打开的,其他项都是关闭的)。

    checkList = Tix.CheckList(win)
    checkList.pack(in_=frameTop, side=Tix.LEFT, fill=Tix.BOTH, expand=Tix.YES)
    checkList.hlist.config(bg='white', selectbackground='white', selectforeground='black', header=True, browsecmd=itemEvent)
    checkList.hlist.header_create(0, itemtype=Tix.TEXT, text='Select layers to add to the map', relief='flat')
    checkList.hlist.bind("<ButtonRelease-1>", checkListClicked)
    
    for i in items:
        try:
            checkList.hlist.add(i["id"], text=i["text"])
        except:
            print "WARNING:  Failed to add item to checklist:  {} - {}".format(i["id"], text=i["text"])
        # Delete this next line
        #checkList.close(i["id"])
        checkList.setstatus(i["id"], "off")
    
    checkList.autosetmode()
    #  Add these following lines (include whatever condition you like in the 'if')
    for i in items:
        if checkList.hlist.info_parent(i["id"]):
            checkList.close(i["id"])
    
    推荐文章