python tkinter treeview 操作示例

发布时间 2023-11-22 17:52:38作者: pu369com

1.建立Treeview

from tkinter import *
from tkinter.ttk import *

root = Tk()
# 建立Treeview
columns = (
    ('ID', 50),
    ('S_ID', 50),
    ('S_NAME', 120),
    ('B_NAME', 120),
    ('Date_Taken', 100),
    ('Due_Date', 100),
    ('Date_Returned', 100),
    ('Status', 50),
)
treeview = Treeview(root, height=20, columns=[x[0] for x in columns], show='headings')
for col, width in columns:
    treeview.heading(col, text=col)
    treeview.column(col, width=width, anchor=CENTER)
treeview.place(x=50,y=50)
root.geometry("1000x800+10+10")
root.mainloop()

2.在root上加一个Entry

from tkinter import *
from tkinter.ttk import *

root = Tk()
root.geometry("1000x800+10+10")
# 建立treeview1
columns = (
    ('ID', 50),
    ('S_ID', 50),
    ('S_NAME', 120),
    ('B_NAME', 120),
    ('Date_Taken', 100),
    ('Due_Date', 100),
    ('Date_Returned', 100),
    ('Status', 50),
)
treeview1 = Treeview(root, height=20, columns=[x[0] for x in columns], show='headings')
for col, width in columns:
    treeview1.heading(col, text=col)
    treeview1.column(col, width=width, anchor=CENTER)
treeview1.place(x=50,y=50)
#增加输入框
en1=Entry(root,width=10)
en1.place(x=50,y=10)
def treeitemadd(event):
    print(event.keysym)
    #在treeview1增加行 
    en1txt = event.widget.get()
    values=(en1txt,en1txt,en1txt,en1txt)
    treeview1.insert("",'end',values=values)
    treeview1.update()
    
# 绑定keypress-Return事件到Entry上
en1.bind('<KeyPress-Return>', treeitemadd)

root.mainloop()

 3.获取treeview的一些属性

from tkinter import *
from tkinter.ttk import *

root = Tk()
root.geometry("1000x800+10+10")
# 添加一个菜单
m = Menu(root)
root.config(menu=m)
# 添加菜单下拉列表项
file_menu = Menu(m, tearoff=False)
m.add_cascade(label="菜单", menu=file_menu)
file_menu.add_command(label="打开", )

# 建立treeview1
columns = (
    ('ID', 50),
    ('S_ID', 50),
    ('S_NAME', 120),
    ('B_NAME', 120),
    ('Date_Taken', 100),
    ('Due_Date', 100),
    ('Date_Returned', 100),
    ('Status', 50),
)
treeview1 = Treeview(root, height=20, columns=[x[0] for x in columns], show='headings')
for col, width in columns:
    treeview1.heading(col, text=col+"")
    treeview1.column(col, width=width, anchor=CENTER)
treeview1.place(x=50,y=50)
# Create a Scrollbar
scrollbar = Scrollbar(root, orient="vertical", command=treeview1.yview)
# Configure the Treeview to use the scrollbar
treeview1.configure(yscrollcommand=scrollbar.set)
# Place the scrollbar on the right side of the Treeview
scrollbar.set(0.5,0)
scrollbar.place(x=800,y=200)

treeview2 = Treeview(root, height=20, columns=[x[0] for x in columns], show='headings')
treeview2.column(0,width=200)
#增加输入框
en1=Entry(root,width=10)
en1.place(x=50,y=10)


def finddatashow(event):     
    treeview2.place(x=50,y=350)
def finddatahide(event):     
    treeview2.place_forget()
def treeitemadd(event):   
    #在treeview1增加行 
    en1txt = event.widget.get()
    values=(en1txt,en1txt,en1txt,en1txt)
    #treeview1.insert("",'end',values=values)
    for i in range(5):
        treeview1.insert("",'end',values=(i,))
    treeview1.update()
def treedoubleclick(event):    
    print( "标题列:",treeview1["column"]);
    widg = event.widget # treeview句柄
    print(widg) 
    itemsel = widg.selection() #选择的行
    print('选定行:',itemsel)
    column= treeview1.identify_column(event.x)# 列
    row = treeview1.identify_row(event.y)  # 行
    print("列,行:",column,row)
    print("========",treeview1.column(7))
    for col in treeview1["column"]:
        print(col);        
    if row: #防止treeview为空而出错
        cn = int(str(column).replace('#',''),base=16)  #注意是设置16进制,如果按默认10进制则会有bug
        rn = int(str(row).replace('I',''),base=16)
        print(cn,rn)
        print(type(column))
        #修改选定行
        treeview1.set(itemsel, column=0, value="222")
        #修改第1行
        treeview1.set(item = ('I001',), column=0, value="333")
        #获取所有行
        itemall = treeview1.get_children()
        print(itemall)
        #获取行数
        print("共几行:",len(itemall))
        #获取第二个表头
        col2 = treeview1.heading(2)        
        print("表头2:",col2)                   
        #删除所有行
        #treeview1.delete(*itemall)
        
    treeview1.update()  #没这一行好像也行
    
    
# 绑定keypress-Return事件到Entry上
en1.bind('<KeyPress-Return>', treeitemadd)
en1.bind('<FocusIn>',finddatashow)
en1.bind('<FocusOut>',finddatahide)
# 绑定<Double-1>鼠标双击事件到Treeview上
treeview1.bind('<Double-1>', treedoubleclick)
root.mainloop()