Tkinter Treeview的基本概念

Tkinter Treeview的基本概念

Treeview是tkinter.ttk的控件,这个控件主要是提供多栏的显示功能,我们可以称其为树状表格数据(Treeview)。在设计时也可以在左边栏设计成树状结构或是称层次结构,用户可以显示或隐藏任何部分,这个最左边的栏称为图标栏。

设计Treeview控件的基本思想是,使用Treeview构造方法建立Treeview对象。

Treeview的语法如下。

Treeview(master, options, ...)

Treeview( )方法的第一个参数是父对象,表示这个Treeview将建立在哪一个父对象内。下列是Treeview( )方法内其他常用的options参数。

(1)columns:栏位的字符串,其中,第一个栏位是图标栏是默认的,不在此设置范围,如果设置columns=("Name","Age"),则控件有三栏,首先是最左栏的图标栏,可以进行展开(expand)或是隐藏(collapse)操作,另外两栏是Name和Age。

(2)cursor:可以设置光标在此控件上的外观。

(3)displaycolumns:可以设置栏位显示顺序。

  • 如果参数是“#all”表示显示所有栏,同时依建立顺序显示。
  • 如果设置columns=("Name","Age","Date"),使用insert( )插入元素时需要依次插入元素。同样状况如果使用columns(2,0),(2,0)是指实体索引,则图标栏在最前面,紧跟着是Date栏,然后是Name栏。这种状况也可以写成columns=("Date","Name")

(4)height:控件每行的高度。

(5)padding:可以使用1~4个参数设置内容与控件框的间距,它的规则如下。

Value Left Top Right Bottom
a a a a a
ab a b a b
abc a c b c
abcd a b c d

(6)selectmode:用户可以使用鼠标选择项目的方式。

  • selectmode=BROWSE,一次选择一项,这是默认。
  • selectmode=EXTENDED,一次可以选择多项。
  • selectmode=NONE,无法用鼠标执行选择。

(7)show:默认是设置显示图标栏的标签show="tree",如果省略则是显示图标栏,如果设为show="headings",则不显示图标栏。

(8)takefocus:默认是True,如果不想被访问可以设为False。

下面以实例说明更多规则。

示例1

简单建立Treeview控件的应用。

from tkinter import *
from tkinter.ttk import *

root = Tk()
root.title("apidemos.com")

# 建立Treeview
tree = Treeview(root,columns="cities") # tree = Treeview(root,columns=("cities"))
# 建立栏标题
tree.heading("#0",text="State") # 图标栏
tree.heading("#1",text="City")
# 建立内容
tree.insert("",index=END,text="Eleanor",values="Chicago")
tree.insert("",index=END,text="California",values="Los Angeles")
tree.insert("",index=END,text="Tokyo",values="Houston")
tree.pack()

root.mainloop()

输出:

Tkinter Treeview的基本概念

建议读者单击选择,以体会Treeview的基本操作,下方右图是单击选择的示范输出。

Tkinter Treeview的基本概念

上述程序第9行建立Treeview控件,此控件名称是tree,此控件有一个栏位,域名是cities,未来程序设计可以使用此cities代表这一个栏位。经这样设置后,我们可以知道此多栏窗体有两个栏位,除了cities外,另外左边有图标栏位。

程序第11、12行使用heading( )方法,在这个方法内建立了栏标题,其中,第一个参数“#0”是指最左栏图标栏位,“#1”是指第一个栏位,所以这两行分别建立了两个栏标题。

程序第14~16行使用insert( )方法插入Treeview控件内容,在这个方法中的第一个参数“”,代表父id,因为图标栏未来可以有树状结构,所以有这一个栏位设计,后面会有实例说明。当所建的栏是最顶层时,可以用“”空字符串处理。第二个参数index=END代表将资料插入Treeview末端,它的思想与Text控件的END相同。第三个参数text是设置图标栏的内容。第4个参数的values是设置City栏的内容。

示例2

在建立Treeview控件时,增加show="headings"参数,将不显示图标栏。

from tkinter import *
from tkinter.ttk import *

root = Tk()
root.title("apidemos.com")

# 建立Treeview
tree = Treeview(root,columns=("cities"),show="headings")
# 建立栏标题
tree.heading("#0",text="State") # 图标栏
tree.heading("#1",text="City")
# 建立内容
tree.insert("",index=END,text="Eleanor",values="Chicago")
tree.insert("",index=END,text="California",values="LosAngeles")
tree.insert("",index=END,text="Tokyo",values="Houston")
tree.pack()

root.mainloop()

输出:

Tkinter Treeview的基本概念

示例3

示例1第9行columns=("cities"),指出栏标题名称是cities,我们可以使用此字符串代表栏位。在第12行使用“#1”代表cities栏,其实可以使用此“cities”取代“#1”。

from tkinter import *
from tkinter.ttk import *

root = Tk()
root.title("apidemos.com")

# 建立Treeview
tree = Treeview(root,columns=("cities"))
# 建立栏标题
tree.heading("#0",text="State") # 图标栏
tree.heading("cities",text="City") # tree.heading("#1",text="City下施")
# 建立内容
tree.insert("",index=END,text="Eleanor",values="Chicago")
tree.insert("",index=END,text="California",values="LosAngeles")
tree.insert("",index=END,text="Tokyo",values="Houston")
tree.pack()

root.mainloop()

输出:

Tkinter Treeview的基本概念

在程序1的第14行insert( )方法中第4个参数values是设置所插入的内容,上述由于除了图标栏外只有一个栏位,所以只是设置values等于字符串内容,如果有多栏时,须使用values=(value1, value2, … ),如果所设置的内容数太少时其他栏将是空白,如果所设置的内容数太多时多出来的内容将被抛弃。

示例4

增加population人口数栏位,其中,人口数的单位是万人。

from tkinter import *
from tkinter.ttk import *

root = Tk()
root.title("apidemos.com")

# 建立Treeview
tree = Treeview(root,columns=("cities","populations"))
# 建立栏标题
tree.heading("#0",text="State") # 图标栏
tree.heading("#1",text="City")
tree.heading("#2",text="Populations")
# 建立内容
tree.insert("",index=END,text="Eleanor",values=("Chicago","800")) 
# tree.insert("",index=END,text="Eleanor",values=("Chicago","800","9999"))# 多余信息
tree.insert("",index=END,text="California",values=("LosAngeles","1000"))# 
# tree.insert("",index=END,text="California",values=("LosAngeles"))# 缺少信息
tree.insert("",index=END,text="Tokyo",values=("Houston","900"))# 信息正常
tree.pack()

root.mainloop()

输出:

Tkinter Treeview的基本概念

由上述执行结果下面再次强调insert()方法的用法。

(1)text:设置图标栏的内容。

(2)values:设置一般栏位的内容,values=("芝加哥","800"),这是以顺序方式设置栏位,“芝加哥”是第一个栏位,“800”是第二个栏位。

其实当我们了解上述values参数内容后,也可以将Python的列表应用于建立栏位内容。

示例5

使用列表方式建立栏位内容,读者应该学习第8~10行设置列表内容,以及第18~20行将列表应用在insert( )方法的values参数。

from tkinter import *
from tkinter.ttk import *

root = Tk()
root.title("apidemos.com")

tuple1 = ("Chicago","800")              # 以元组方式设置栏内容     
list2 = ["LosAngeles","1000"]             # 以列表方式设置栏内容
list3 = ["Houston","900"]                # 以列表方式设置栏内容
# 建立Treeview
tree = Treeview(root,columns=("cities","populations"))
# 建立栏标题
tree.heading("#0",text="State") # 图标栏
tree.heading("#1",text="City")
tree.heading("#2",text="Populations")
# 建立内容
tree.insert("",index=END,text="Eleanor",values=tuple1) # 也可以使用元组代替
tree.insert("",index=END,text="California",values=list2)
tree.insert("",index=END,text="Tokyo",values=list2)
tree.pack()

root.mainloop()

输出:

Tkinter Treeview的基本概念

上述程序使用列表建立insert( )方法的values参数内容,也可以使用元组代替,具有相同效果。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程