Python Tkinter:idlelib.TreeWidget文件夹颜色
通过使用我在网上找到的一个简单示例,我使用idlelib.TreeWidget创建了一个树: 我目前正在Linux上运行这个示例,在树节点旁边很好地显示了文件夹图标。但是,我希望对某些节点使用不同的颜色。可能吗Python Tkinter:idlelib.TreeWidget文件夹颜色,python,canvas,tree,tkinter,python-idle,Python,Canvas,Tree,Tkinter,Python Idle,通过使用我在网上找到的一个简单示例,我使用idlelib.TreeWidget创建了一个树: 我目前正在Linux上运行这个示例,在树节点旁边很好地显示了文件夹图标。但是,我希望对某些节点使用不同的颜色。可能吗 from Tkinter import Tk, Canvas from xml.dom.minidom import parseString from idlelib.TreeWidget import TreeItem, TreeNode class DomTreeItem(Tree
from Tkinter import Tk, Canvas
from xml.dom.minidom import parseString
from idlelib.TreeWidget import TreeItem, TreeNode
class DomTreeItem(TreeItem):
def __init__(self, node):
self.node = node
def GetText(self):
node = self.node
if node.nodeType == node.ELEMENT_NODE:
return node.nodeName
elif node.nodeType == node.TEXT_NODE:
return node.nodeValue
def IsExpandable(self):
node = self.node
return node.hasChildNodes()
def GetSubList(self):
parent = self.node
children = parent.childNodes
prelist = [DomTreeItem(node) for node in children]
itemlist = [item for item in prelist if item.GetText().strip()]
return itemlist
data = '''
<a>
<b>
<c>d</c>
<c>e</c>
</b>
<b>
<c>f</c>
</b>
</a>
'''
root = Tk()
canvas = Canvas(root)
canvas.config(bg='white')
canvas.pack()
dom = parseString(data)
item = DomTreeItem(dom.documentElement)
node = TreeNode(canvas, None, item)
node.update()
node.expand()
root.mainloop()
从Tkinter导入Tk,画布
从xml.dom.minidom导入解析字符串
从idlelib.TreeWidget导入TreeItem,TreeNode
类DomTreeItem(TreeItem):
定义初始化(自身,节点):
self.node=节点
def GetText(self):
node=self.node
如果node.nodeType==node.ELEMENT\u node:
返回node.nodeName
elif node.nodeType==node.TEXT\u节点:
返回node.nodeValue
def可扩展(自):
node=self.node
return node.hasChildNodes()
def GetSubList(自身):
父节点=self.node
children=parent.childNodes
prelist=[DomTreeItem(节点)表示子节点中的节点]
itemlist=[如果item.GetText().strip(),则预列表中的项对应于项]
返回项目列表
数据=“”
D
E
F
'''
root=Tk()
画布=画布(根)
canvas.config(bg='white')
canvas.pack()
dom=parseString(数据)
item=DomTreeItem(dom.documentElement)
节点=树节点(画布、无、项)
node.update()
node.expand()
root.mainloop()
我发现我们可以使用TreeWidget的内置函数GetIconName()。此功能可自定义图标
因此,可用图标取决于/idlelib/icons中的图标/
以下示例确保不可展开的项目具有打开的文件夹:
class DomTreeItem(TreeItem):
def __init__(self, node):
self.node = node
def GetText(self):
node = self.node
if node.nodeType == node.ELEMENT_NODE:
return node.nodeName
elif node.nodeType == node.TEXT_NODE:
return node.nodeValue
def IsExpandable(self):
node = self.node
return node.hasChildNodes()
def GetSubList(self):
parent = self.node
children = parent.childNodes
prelist = [DomTreeItem(node) for node in children]
itemlist = [item for item in prelist if item.GetText().strip()]
return itemlist
def OnDoubleClick(self):
print "double-clicked"
def GetIconName(self):
if not self.IsExpandable():
return "openfolder"