添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
茫然的钥匙  ·  Appium基础学习之 | ...·  1 年前    · 
眉毛粗的书签  ·  start: Unable to ...·  1 年前    · 
root = Tk() # 初始框的声明 columns = ("姓名", "IP地址") treeview = ttk.Treeview(root, height=18, show="headings", columns=columns) # 表格 treeview.column("姓名", width=100, anchor='center') # 表示列,不显示 treeview.column("IP地址", width=300, anchor='center') treeview.heading("姓名", text="姓名") # 显示表头 treeview.heading("IP地址", text="IP地址") treeview.pack(side=LEFT, fill=BOTH) name = ['电脑1','服务器','笔记本'] ipcode = ['10.13.71.223','10.25.61.186','10.25.11.163'] for i in range(min(len(name),len(ipcode))): # 写入数据 treeview.insert('', i, values=(name[i], ipcode[i])) root.mainloop() # 进入消息循环

2.编写功能函数,并与鼠标事件绑定

通过功能函数,实现按表头排序、编辑单元格、新建单元格。

1.编辑单元格函数set_cell_value原理:

在原单元格上方新建一个文本框Text和按钮Button,用来编辑内容,按下按钮将单元格内容存入单元格,并销毁文本框Text和按钮Button。

2.新建单元格函数newrow原理:

调用Treeview.insert方法,并在表格下方设置‘新建’按钮Button,用来关联函数,按钮位置随表格行数实时更新。

def treeview_sort_column(tv, col, reverse):  # Treeview、列名、排列方式
    l = [(tv.set(k, col), k) for k in tv.get_children('')]
    l.sort(reverse=reverse)  # 排序方式
    # rearrange items in sorted positions
    for index, (val, k) in enumerate(l):  # 根据排序后索引移动
        tv.move(k, '', index)
    tv.heading(col, command=lambda: treeview_sort_column(tv, col, not reverse))  # 重写标题,使之成为再点倒序的标题
def set_cell_value(event): # 双击进入编辑状态
    for item in treeview.selection():
        #item = I001
        item_text = treeview.item(item, "values")
        #print(item_text[0:2])  # 输出所选行的值
    column= treeview.identify_column(event.x)# 列
    row = treeview.identify_row(event.y)  # 行
    cn = int(str(column).replace('#',''))
    rn = int(str(row).replace('I',''))
    entryedit = Text(root,width=10+(cn-1)*16,height = 1)
    entryedit.place(x=16+(cn-1)*130, y=6+rn*20)
    def saveedit():
        treeview.set(item, column=column, value=entryedit.get(0.0, "end"))
        entryedit.destroy()
        okb.destroy()
    okb = ttk.Button(root, text='OK', width=4, command=saveedit)
    okb.place(x=90+(cn-1)*242,y=2+rn*20)
def newrow():
    name.append('待命名')
    ipcode.append('IP')
    treeview.insert('', len(name)-1, values=(name[len(name)-1], ipcode[len(name)-1]))
    treeview.update()
    newb.place(x=120, y=(len(name)-1)*20+45)
    newb.update()
treeview.bind('<Double-1>', set_cell_value) # 双击左键进入编辑
newb = ttk.Button(root, text='新建联系人', width=20, command=newrow)
newb.place(x=120,y=(len(name)-1)*20+45)

3.完整代码

from tkinter import ttk
from tkinter import *
root = Tk()  # 初始框的声明
columns = ("姓名", "IP地址")
treeview = ttk.Treeview(root, height=18, show="headings", columns=columns)  # 表格
treeview.column("姓名", width=100, anchor='center') # 表示列,不显示
treeview.column("IP地址", width=300, anchor='center')
treeview.heading("姓名", text="姓名") # 显示表头
treeview.heading("IP地址", text="IP地址")
treeview.pack(side=LEFT, fill=BOTH)
name = ['电脑1','服务器','笔记本']
ipcode = ['10.13.71.223','10.25.61.186','10.25.11.163']
for i in range(min(len(name),len(ipcode))): # 写入数据
    treeview.insert('', i, values=(name[i], ipcode[i]))
def treeview_sort_column(tv, col, reverse):  # Treeview、列名、排列方式
    l = [(tv.set(k, col), k) for k in tv.get_children('')]
    l.sort(reverse=reverse)  # 排序方式
    # rearrange items in sorted positions
    for index, (val, k) in enumerate(l):  # 根据排序后索引移动
        tv.move(k, '', index)
    tv.heading(col, command=lambda: treeview_sort_column(tv, col, not reverse))  # 重写标题,使之成为再点倒序的标题
def set_cell_value(event): # 双击进入编辑状态
    for item in treeview.selection():
        #item = I001
        item_text = treeview.item(item, "values")
        #print(item_text[0:2])  # 输出所选行的值
    column= treeview.identify_column(event.x)# 列
    row = treeview.identify_row(event.y)  # 行
    cn = int(str(column).replace('#',''))
    rn = int(str(row).replace('I',''))
    entryedit = Text(root,width=10+(cn-1)*16,height = 1)
    entryedit.place(x=16+(cn-1)*130, y=6+rn*20)
    def saveedit():
        treeview.set(item, column=column, value=entryedit.get(0.0, "end"))
        entryedit.destroy()
        okb.destroy()
    okb = ttk.Button(root, text='OK', width=4, command=saveedit)
    okb.place(x=90+(cn-1)*242,y=2+rn*20)
def newrow():
    name.append('待命名')
    ipcode.append('IP')
    treeview.insert('', len(name)-1, values=(name[len(name)-1], ipcode[len(name)-1]))
    treeview.update()
    newb.place(x=120, y=(len(name)-1)*20+45)
    newb.update()
treeview.bind('<Double-1>', set_cell_value) # 双击左键进入编辑
newb = ttk.Button(root, text='新建联系人', width=20, command=newrow)
newb.place(x=120,y=(len(name)-1)*20+45)
for col in columns:  # 绑定函数,使表头可排序
    treeview.heading(col, text=col, command=lambda _col=col: treeview_sort_column(treeview, _col, False))
1.遍历表格
t = treeview.get_children()
for i in t:
    print(treeview.item(i,'values'))
2.绑定单击离开事件
def treeviewClick(event):  # 单击
    for item in tree.selection():
        item_text = tree.item(item, "values")
        print(item_text[0:2])  # 输出所选行的第一列的值
tree.bind('<ButtonRelease-1>', treeviewClick)  
------------------------------
鼠标左键单击按下1/Button-1/ButtonPress-1 
鼠标左键单击松开ButtonRelease-1 
鼠标右键单击3 
鼠标左键双击Double-1/Double-Button-1 
鼠标右键双击Double-3 
鼠标滚轮单击2 
鼠标滚轮双击Double-2 
鼠标移动B1-Motion 
鼠标移动到区域Enter 
鼠标离开区域Leave 
获得键盘焦点FocusIn 
失去键盘焦点FocusOut 
键盘事件Key 
回车键Return 
控件尺寸变Configure
------------------------------
root.mainloop()  # 进入消息循环

4.GUI实现效果

                                       图1  最初界面                                                                         图2  按姓名排序

                                       图3  按IP地址排序                                                                  图4  新建联系人

                                                                                     图5  编辑单元格

参考链接python ttk Treeview的插入、清空、各种点击事件、获取条目值、标题单击排序

版本:Python3.71.使用Treeview创建表格界面from tkinter import ttkfrom tkinter import *root = Tk() # 初始框的声明columns = ("姓名", "IP地址")treeview = ttk.Treeview(root, height=18, show="headings", columns=column...
一、Tkinter介绍 Tkinter是一个python模块,是一个调用Tcl/Tk的接口,它是一个跨平台的脚本图形界面接口。Tkinter不是唯一的python图形编程接口,但是是其中比较流行的一个。最大的特点是跨平台,缺点是性能不太好,执行速度慢。 一般使用Tkinter的方法是: From Tkinter import * 或者: import Tkinter 两者的区别我们前面讲模块的时候已经说过了。 二、Tkinter的使用 先看一下GUI程序的开发,熟悉MFC的朋友应该不会陌生。在GUI程序中,我们会有一个顶层窗口,在这个顶层窗口上可以包括所有的小窗口对象,像标签,按钮,列表框
本文适用于tkinterGUI显示Excel数据 python Excel数据显示python tkinter tkintertable Excel数据显示到GUI上前言一、创建GUI界面二、使用步骤1.引入库三、效果图总结 本文主要使用是将Excel数据显示到python tkinter GUI 界面上进行展示,主要使用的方法为pandas DataFrame对Excel数据进行处理,再使用tkinterta
Treeview 组件是 ttk 模块的组件之一,它既可以作为树结构使用,也可以作为表格展示数据tkinter 并没有表格控件)。 和常见的树装结构一样,当 Treeview 作为树使用时,非叶子节点可以展开和折叠。 本文将详细介绍 Treeview 作为表格和作为树的使用方法,并提供具有源码的示例。 tkinter Treeview 控件的使用方法 创建 Treeview 控件 Treeview 参数解读 作为表格使用 Treeview 作为树使用 Treeview Treeview 插入子节点 效果预览(先上图,如果不是您想要的效果,可直接略过): **起因:**因工作需要,需要用Pyqt5制表格,因为要在行表头 添加一个 复选框 实现 全选功能。在选择QTableWidget 类 还是 QTableView 类时不知改如何抉择,于是各种百度各种博客,结果被一博客误导,踩了好几天的坑,辛酸历程在此不表。所以,特此写下此笔记,供喜欢pyqt5的同行们参考。如能帮到您,将是我的荣幸。 QTableWid
嗨!关于PythonTkinter库中的TreeView表格,我可以为您提供一些基本信息。TkinterPython的标准GUI库,其中的TreeView部件用于创建树状结构的数据表格。 首先,您需要导入Tkinter库: import tkinter as tk from tkinter import ttk 然后,您可以创建一个Tkinter窗口,并在窗口上添加一个TreeView表格: root = tk.Tk() tree = ttk.Treeview(root) tree["columns"] = ("column1", "column2", "column3") # 设置表格的列数 tree.heading("#0", text="Item") # 设置表格的第一列标题 # 添加表格数据 tree.insert("", "end", text="Item 1", values=("Value 1", "Value 2", "Value 3")) tree.insert("", "end", text="Item 2", values=("Value 4", "Value 5", "Value 6")) tree.pack() root.mainloop() 在上面的示例中,我们创建了一个包含3列的TreeView表格,并添加了两个带有值的项。您可以根据需要添加更多行和列。 如果您想要对表格进行排序、编辑行、删除行等操作,可以使用TreeView的相关方法和事件。您可以参考TkinterTreeView的文档以获取更详细的信息。 希望这可以帮助到您!如有任何进一步的问题,请随时提问。