Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter:idlelib.TreeWidget文件夹颜色_Python_Canvas_Tree_Tkinter_Python Idle - Fatal编程技术网

Python Tkinter:idlelib.TreeWidget文件夹颜色

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

通过使用我在网上找到的一个简单示例,我使用idlelib.TreeWidget创建了一个树:

我目前正在Linux上运行这个示例,在树节点旁边很好地显示了文件夹图标。但是,我希望对某些节点使用不同的颜色。可能吗

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"