首页 > 技术文章 > ttk.Treeview

wumac 2016-09-05 12:40 原文

TTK的目的。

TreeView控件的呈现层次结构,用户可以使用鼠标动作来显示或隐藏结构的任何部分。

与术语“树”的关联是由于编程实践:树结构是一个常见的程序设计。严格地说,在一个TreeView控件显示的层次结构是一个森林:没有一个根,只是一个收集的顶级节点,每个可能包含二级节点,每个节点可以包含第三级,等等。

您可能已经遇到了这个特定的演示文稿作为浏览目录或文件夹层次结构的一种方式。整个层次结构显示像一个锯齿状的轮廓,其中每个目录是一个单独的行,并显示每个目录的子目录下面,缩进:

用户可以点击一个目录的图标崩溃(关闭)它,隐藏在它的所有项目。他们也可以再次点击图标来展开(打开)它,以便目录或文件夹中的项目被显示出来。

的TreeView控件的推广这个概念,你可以用它来显示任何层次结构,和读者可以折叠或展开这一结构子树与鼠标。

首先,一些定义:

item

正在显示的部件中的一个实体。对于一个文件浏览器,一个项目可能是一个目录或一个文件。

每个项目都与文本标签相关联的,也可以与图像相关联的。

IID

在树的每一个项目都有一个唯一的标识符字符串称为IID。你们能提供的IID值你自己,或者你可以让这些生成。

child

在层次结构中的一个给定项目下的项目。例如,一个目录,,可能有两种孩子:文件和子目录。

parent

对于一个给定的项目,如果它是在层次结构的顶部,它被称为没有父;如果它不是在顶层,父是包含它的项目。

ancestor

一个项目的祖先包括它的父母,它的父母的父母,所以在树的最高水平。

visible        

顶层项目总是可见的。否则,只有当所有的祖先都被扩展时,一个项目是可见的。

descendant

一个项目的后代包括它的孩子,它的孩子的孩子,等等。另一种说法是,一个项目的子树包含所有它的后代。

tag

您的程序可以将一个或多个标记字符串与每个项目关联。您可以使用这些标签来控制项目的外观。例如,你可以使用标签的“D”和“F”文件的标签标签的目录,然后指定物品的标签“D”用黑体字体。

您也可以将事件与标签关联,以便某些事件将导致某些处理程序被调用具有该标记的所有项目。例如,您可以设置一个文件浏览器,以便当用户点击一个目录时,浏览器更新其内容以反映当前的文件结构。

你的TreeView控件的结构将与多个列。我们将称为“图标”列的第一列,显示折叠或展开项目的图标。在剩下的栏目中,你可以展示你喜欢的任何信息。

例如,一个简单的文件浏览器组件可能使用两个列,在第一列中的目录图标和第二列中的目录或文件名。或者您可能希望显示其他列的文件大小、权限和其他相关数据。

在TreeView控件的操作,甚至允许你使用它作为一个树编辑。你的程序可以删除整个子树从它的位置在主树,然后将它之后在一个完全不同的角度。

这里是设置TreeView控件的一般程序。

1。创建TTK TreeView的构造函数的部件。使用列关键字参数来指定要显示的列数,并为每个列分配符号名。

2。使用。column()和。heading()方法设置列标题(如果你想)和配置列属性如大小和拉伸性。

三.从顶层的条目,使用方法。insert()填充树。每个对该方法的调用将一个项目添加到树中。使用此方法的打开关键字参数来指定项目是否最初是扩展或折叠的。

如果你想为这个项目提供的ID值,使用IID关键字参数。如果省略此参数,将使一个TTK并返回它的结果。insert()方法调用。

使用此方法的值关键字参数指定在该项目的每个列中应出现的什么时,它是可见的。

在一个给定的父控件创建一个TreeView控件:

w = ttk.Treeview(parent, option=value, ...)

构造函数返回新的TreeView控件。它的选项包括:

class_

当您创建这个小部件时,您可以提供一个小部件的名称。此名称可用于自定义小部件的外观;请参见第27节“标准外观”。一旦创建了小部件,则无法更改小部件的名称。

columns

列标识符字符串的序列。这些字符串在内部使用,以确定控件中的列。图标栏,其标识符总是“# 0”,包含折叠/展开的图标总是第一列。

您指定的列参数的列除了图标列之外。

例如,如果你指定的列=('name','大小'),三列将出现在窗口的图标:第一列,然后两柱内部标识符的名称和大小。

cursor

使用该选项指定鼠标光标的外观,当它在窗口;参见5.8节,“光标”。指定的默认值(一个空字符串)指定从父控件继承的光标。

displaycolumns

选择实际上显示的列,并确定它们的演示文稿的顺序。价值观可能:

•”#所有选择所有列的列参数定义的顺序显示。

A列数(整数的位置,从0计数)或列标识符从列参数列表。

例如,假设你指定列=('name','大小','日')。这意味着每个电话。insert()方法需要一个参数值=(名称、大小、日期)提供的值将被显示。让我们将此序列称为“逻辑列”序列。

进一步假设你指定列=构造函数(2,0)。物理列的顺序,将实际出现在小部件中的列,将是三:图标列将是第一个,然后是数据列(逻辑列序列中的索引2),然后是“名称”列(逻辑列索引0)。大小列将不会出现。

你可以通过指定列的标识符,而不是逻辑列位置得到同样的效果:柱=('date ','名')。

height

使用此参数可以将额外的空间放在小部件内部的内容周围。您可以提供一个单一的维度或一个高达四个维度的序列,根据本表解释:

Values givenLeftTopRightBottom
a a a a a
a b a b a b
a b c a c b c
a b c d a b c d

 selectmode

此选项可以控制用户允许使用鼠标选择什么。可以值:

selectmode='browse'                                                   The user may select only one item at a time.                        
selectmode='extended'                                                   The user may select multiple items at once.                        
selectmode='none'                        

                          The user cannot select items with the mouse.

 show

抑制标签在每一列的顶部,指定显示=‘树’。默认是显示列标签。

style

使用此选项可以指定一个自定义控件样式名称;参见47节,“定制和创建TTK的主题和风格”。

takefocus

使用这个选项来指定一个小部件是否被访问在焦点遍历;见第53节,“焦点:路由键盘输入”。指定takefocus =真正的如果你想去接受焦点;指定takefocus =如果控件不接受焦点错误。默认值为空字符串;默认情况下,控件获得焦点的控件做的TTK。

这里有一个TreeView控件的使用方法。

.bbox(item,column=None)

该项目的项目,如果该项目是目前可见的,此方法返回一个元组(X,Y,W,H),其中(x,y)是该项目的左上角的坐标相对于控件,和W和H是该项目的宽度和像素高度。如果该项目是不可见的,该方法返回一个空字符串。

如果省略了可选的列参数,则将得到整个行的包围盒。要得到项目行的一个特定列的包围框,使用列= C,其中C是列的整数索引或它的列标识符。

.column(cid, option=None, **kw)        

该方法配置指定的CID的逻辑列的外观,它可以是一个列的索引或列标识。配置图标栏,使用CID值“0”#。

在TreeView控件的每个列都有其选择自己从这个表:

anchor                                       The anchor that                    specifies where to position the content of the                    column.  The default value is 'w'.                  
id                                       The column name.  This option is read-only and                    set when the constructor is called.                  
minwidth                                       Minimum width of the column in pixels; the default                    value is 20.                  
stretch                                       If this option is True, the                    column's width will be adjusted when the widget is                    resized.  The default setting is 1.                  
width                                       Initial width of the column in pixels; the default                    is 200.

 如果提供了没有选项值或任何其他关键字参数,则该方法将返回指定列的列选项的字典。

•审问的一个选项,命名为x的当前值,使用一个参数选项= x。

•设置一个或多个列的选项,你可以通过关键字参数使用上面显示的选项名称如锚= tk.center中心栏目内容。

.delete(*items)        

参数是IID值。在有匹配的IID值部件的所有项目都被摧毁了,连同他们的后代。

.detach(*items)

参数是IID值。在有匹配的IID值的控件的所有物品都是从可见的部件拆下,连同他们的后代。

项目没有被销毁。你可以将它们用可见树move()下面描述的方法。

.exists(iid)        

返回true,如果存在一个项目中的控件与给定的IID,否则。如果一个项目不可见因为它被删除的。detach()方法,它仍然被认为是为这个目的而存在。exists()方法。

.focus([iid])        

如果你不为这个方法提供了一种说法,你回来或者物品的IID当前具有焦点,或“如果没有项目有焦点。

你可以通过其IID作为参数传递给这个方法一个项目给予重点。

.get_children([item])        

返回一个元组的儿童项目的项目参数指定的ID值。如果省略该参数,你会得到一个元组包含顶级项目的IID值。

。标题(CID,选项=无,××千瓦)

使用此方法可以配置在指定的CID柱部件的顶部显示的列标题,可以是一个列的索引或列标识。使用CID参数值“0”#配置标题在图标栏。

每个标题都有自己的一套选项,这些名称和值:

anchor                                       An anchor that specifies how the heading is                    aligned within the column; see Section 5.5, “Anchors”.  The default value is tk.W.                  
command                                       A procedure to be called when the user clicks on                    this column heading.                  
image                                       To present a graphic in the column heading (either                    with or instead of a text heading), set this                    option to an image, as specified in Section 5.9, “Images”.                  
text                                       The text that you want to appear in the column                    heading.

 如果您提供没有关键字参数,该方法将返回一个显示列标题选项当前设置的字典。

•审问一些标题选项当前x的值,使用表格选项= x参数;该方法将返回该选项的当前值。

•可以设置一个或多个标题的选项提供给他们作为关键字参数如“anchor=tk.CENTER”.

.identify_column(x)        

给定一个X坐标,此方法返回一个字符串的形式# N标识包含x坐标列。

假设显示图标列,n的值为图标列的0;第二个物理列的2;第三个物理列的1;等等。记得,物理列数可能不同于逻辑列数的情况下,你将使用displaycolumns TreeView构造函数参数。

如果不显示图标列,则N的值为第一个物理列的2,第二个物理列的1,等等。

.identify_element(xy)        

返回相对于小部件的位置(X,Y)的元素的名称,或“如果没有出现在该位置上的元素”。元素名称在50节中讨论,“TTK元层”。

.identify_region(x,           y))

由于给定一个点相对于小部件的坐标,该方法返回一个字符串,该字符串表示该控件的一部分包含了该点的内容。返回值可能包括:

'nothing'                                       The point is not within a functional part of the                    widget.                  
'heading'                                       The point is within one of the column headings.                  
'separator'                                       The point is located within the column headings                    row, but on the separator between columns.  Use                    the .identify_column() method to                    determine which column is located just to the                    left of this separator.                  
'tree'                                       The point is located within the icon column.                  
'cell'                                       The point is located within an item row but not                    within the icon column.

 .identify_row(y)        

如果坐标内的项目之一,此方法返回该项的IID。如果该垂直坐标不在项目中,该方法将返回一个空字符串。

.index(iid)        

此方法返回的项的索引与指定其母相对独立,从零。

.set_children(item,          *newChildren)        

用这种方法来改变其IID是项项目子项的设置。新建的参数是一个字符串序列IID。任何当前儿童项目不新建删除。

.insert(parent,           index, iid=None, **kw)        

该方法将新项添加到树中,并返回该项的ID值。争论:

parent                                       To insert a new top-level item, make this argument                    an empty string.  To insert a new item as a child                    of an existing item, make this argument the parent                    item's iid.                  
index                                       This argument specifies the position among this                    parent's children where you want the new item to                    be added.  For example, to insert the item as                    the new first child, use a value of zero; to                    insert it after the parent's first child, use a                    value of 1; and so on.  To add the new item as                    the last child of the parent, make this argument's                    value 'end'.                                      
iid                                       You may supply an iid for the item as a string                    value.  If you don't supply an iid, one will be                    generated automatically and returned by the                    method.

 您也可以为该方法指定多个项目选项作为关键字参数。

image                                       You may display an image just to the right of the                    icon for this item's row by providing an image=I                    argument, where I is an image as specified                    in Section 5.9, “Images”.                  
open                                       This option specifies whether this item will be                    open initially.  If you supply open=False, this item will be closed.  If                    you supply open=True, the item's                    children will be visible whenever the item itself                    is visible.  The default value is False.                  
tags                                       You may supply one or more tag strings to be                    associated with this item.  The value may be                    either a single string or a sequence of strings.                  
text                                       You may supply text to be displayed within the                    icon column of this item.  If given, this text                    will appear just to the right of the icon, and                    also to the right of the image if provided.                  
values                                       This argument supplies the data items to be                    displayed in each column of the item.  The values                    are supplied in logical column order.  If too few                    values are supplied, the remaining columns will be                    blank in this item; if too many values are                    supplied, the extras will be discarded.

 .item(iid[, option[, **kw]])        

用这种方法来设置或检索选项指定IID项目内。参阅。insert()方法为项目选择的名字。

没有参数,它返回一个字典,它的键是选项名称,相应的值是这些选项的设置。要检索一个给定选项的值,将该选项的名称传递给它的第二个参数。要设置一个或多个选项,将它们作为关键字参数传递给方法。

.move(iid, parent, index)        

将指定的值由IID位置索引父所指定的项目项下。家长和指标参数相同的参数的方法。index()。

.next(iid)        

如果指定IID的项目不是其父亲的最后一个孩子,这个方法返回以下孩子的IID;如果是其父亲的最后一个孩子,这个方法将返回一个空字符串。如果指定的项目是一个顶级项目,方法返回下一个顶级项目的IID,或空字符串,如果指定的项目是最后的顶级项目。

.parent(iid)        

如果指定IID的项目是一个顶级项目,此方法将返回一个空字符串;否则返回的IID,项母。

.prev(iid)        

如果指定IID的项目并不是其父母的第一个孩子,这个方法返回之前的孩子的IID;否则返回一个空字符串。如果指定的项目是一个顶级项目,此方法返回之前的顶级项目的IID,或空字符串,如果是第一个顶级项目。

.see(iid)        

这种方法确保指定的IID项目是可见的。关闭的任何一的祖先都是开放的。Widget是滚动,如果有必要,使项目出现。

.selection_add(items)

除了已选择的任何项目外,还添加了指定的项目。参数可以是一个单一的IID或一个序列的系统。

.selection_remove(items)        

取消任何项目的指定参数,这可能是一个单一的IID或一个序列的系统。

.selection_set(items)        

只有指定的项将被选中;如果其他项目进行之前,他们会选择。

.selection_toggle(items)        

参数可以是一个单一的IID或一个序列的系统。每个项目指定的参数,如果它被选中,取消它;如果它被选中,选择它。

.set(iid, column=None,          value=None)        

使用此方法检索或设置列值的项指定IID。用一个参数,方法返回一个字典:键是列标识符,而每个相关的值都是在相应的列中的文本。

有两个参数,方法将从所选项目的列返回数据值,其列标识符为列参数。有了三个参数,指定的列的值将被设置为第三个参数。

.tag_bind(tagName,          sequence=None, callback=None)        

该方法将由回调参数所设定的标签标签名指定事件处理程序。序列和回调参数相同的序列和功能参数。()方法在26节中描述的,“通用部件的方法”。

.tag_configure(tagName,          option=None, **kw)        

这种方法可以询问或设置影响所有的物品都有标签,标签名的外观选项。标签选项包括:

'background'                                       The background color.                  
'font'                                       The text font.                  
'foreground'                                       The foreground color.                  
'image'                                       An image to be                    displayed in items with the given tag.

 当调用一个参数时,它返回当前标记选项的字典。要返回一个特定选项x的值,使用X作为第二个参数。

设置一个或多个选项,使用关键字参数例如前景='red'

.tag_has(tagName[,           iid])        

用一个参数调用,该方法返回一个带有标签的标签名的所有项目的IID值列表。如果你提供一个IID作为第二个参数,该方法返回true,如果有标签的标签名,IID的项目,否则为假。

.xview(*args)

这是用于连接水平滚动条滚动部件的常用方法。有关详细信息,请参见第22.1节,“滚动条命令回调”。

.yview(*args)        

这是用于连接垂直滚动条滚动部件的常用方法。有关详细信息,请参见第22.1节,“滚动条命令回调”。

推荐阅读