在Tix hlist清单中有计划地折叠分支



对于我在Python中的第一个GUI,我使用Tix作为其内置的"checklist"one_answers"hlist"小部件来构建一个树视图,其中每个分支和叶子都有复选框。它基本上运行良好。但有一件事我一直没能弄清楚,那就是如何以编程方式折叠树枝。

我希望在检查表首次显示时折叠一些分支,并能够有一个"全部折叠"按钮和一个"展开全部"按钮。

下面是我的代码的清单部分。我希望checkList.close(i["id"])线路可以关闭分支,但事实并非如此。

有人能教我在Tix清单/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()

我本以为以下内容会起作用(例如,在上述循环中(:

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

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

我终于找到了一种方法来实现这一点。我完全放弃了setmode,因为它似乎不适用于我的Python环境;既然我已经有了autosetmode,那么我可以在autosetmode运行之后使用close命令。

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

以下是最终对我有效的方法(如下(。在这种情况下,我将每个有父项的项的分支设置为关闭(即,顶级项打开,所有其他项关闭(。

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"])

相关内容

  • 没有找到相关文章

最新更新