版本:Python3.7

1.使用Treeview创建表格界面

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]))

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('', 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('', 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('', 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的插入、清空、各种点击事件、获取条目值、标题单击排序

python窗口显示表格_Python tkinter Treeview创建GUI表格(可编辑、新建单元格)相关推荐

  1. 树回归--python Tkinter库创建GUI(2)

    简单的Tkinter库创建GUI的例子可参考: http://blog.csdn.net/lilong117194/article/details/78456376 下面是代码: # -*- codi ...

  2. python3-xlwt-Excel设置表格基础(字体颜色 背景颜色 设置边框 边框颜色 冻结窗口 字体大小 字体高度 字体加粗 下划线 斜体字 单元格对齐方式 自动换行 删除线 超链接 插入公式)

    文章目录 引入xlwt和创建workboos对象 初始化样式和创建设置字体,赋值给style 保存文件 自定义样式 字体颜色 背景颜色 设置边框 边框颜色 冻结窗口 字体大小 字体高度 字体加粗 下划 ...

  3. excel 单元格如何获取textbox中的值 java,把excel表格数据定义为文本框-excel中如何将单元格里的数值显示在文本框(textbox)里...

    excel中如何将单元格里的数值显示在文本框(textbox)里 sheets("Sheet2").range("b3")=textbox ---------- ...

  4. Excel表格中多个文本内容快速合并到一个单元格内

    Excel表格中多个文本内容快速合并到一个单元格内 目录 Excel表格中多个文本内容快速合并到一个单元格内 1.在合并单元格内输入"=PHONETIC()"函数 2.框选需要合并 ...

  5. 成功解决在excel表格中仅在某列内插入一个空白单元格,使其下部的数据整体下移一格

    成功解决在excel表格中仅在某列内插入一个空白单元格,使其下部的数据整体下移一格 目录 解决问题 解决方法 解决问题 在excel表格中仅在某列内插入一个空白单元格,使其下部的数据整体下移一格 解决 ...

  6. python窗口显示表格_Python爬虫之GUI图表

    关于Python爬虫系列的这篇文章我很早就想写了,但由于我前两周一直在研究vscode插件开发方面,就没去写文章.所幸目前vscode插件开发的知识了解的差不多了,是时候写了,哈哈.需要说明的是,我并 ...

  7. python提示对话框自动关闭_Python - tkinter:打开和关闭对话框窗口

    我是Python新手,必须编写一个简单的GUI程序,为了简单起见,我选择在tkinter中这样做. 我想要的GUI应该非常类似于在Windows上安装程序时经常遇到的对话框(您想要安装的位置,您想要的 ...

  8. python xlsx 样式 谷歌开源 样式_python XlsxWriter模块创建aexcel表格

    安装使用pip install XlsxWriter来安装,Xlsxwriter用来创建excel表格,功能很强大,下面具体介绍: 1.简单使用excel的实例: #coding:utf-8 impo ...

  9. 基于tkinter模块创建GUI程序(python)

    文章目录 前言 一.Tkinter是什么? 二.使用步骤 1.创建应用程序的主窗口对象(根窗口) 2.tkinter根窗口 3.组件拼图 4.Label标签 布局管理系统 5.pack布局管理器 6. ...

最新文章

  1. LeetCode--046--全排列(java)
  2. metasploit快速入门(一)安装部署
  3. 关于Remoting信道的通信的问题
  4. Bootstrap 4:如何使顶部固定的Navbar保持在容器中而不拉伸?
  5. Ubuntu中的密钥环密码与登陆密码不同
  6. 7-15 城市间紧急救援 (10 分)
  7. android studio生产签名文件,Android Studio生成keystore签名文件步骤讲解
  8. IIS7.5 在已有的WEB网站上配置FTP发布
  9. 微软新开源!不用写 1 行代码的自动化测试工具
  10. python做接口测试的优点_python做接口测试的必要性
  11. 二极管区分极性以及驱动原理
  12. 任意文件夹下打开cmd窗口
  13. oracle表修改语句怎么写,Oracle修改表结构语句
  14. Dubbo分布式系统架构实战视频教程[基础篇高级篇高可用架构]
  15. c++ 控制台游戏打砖块
  16. 敏捷开发绩效管理之四:为团队设立外部绩效目标(目标管理,外向型绩效)
  17. win7下的cmd窗口可以全屏显示吗
  18. 技术胖React博客实战 - 新版问题解决方式整理
  19. 一款高颜值开源知识管理工具
  20. rnnlm源码分析(六)

热门文章

  1. igbt驱动电路实现zcs-pwm
  2. 浪潮服务器nf5270m5做raid_浪潮服务器PM8060阵列卡,如何做热备盘?操作相对有点复杂...
  3. Vue大屏实战四:公共组件边框的实现
  4. VCSA证书过期问题处理
  5. 公司邮箱,那些隐藏的高效办公秘密武器
  6. 图片获取、格式转换与后台存储
  7. 几道pb_ds模板题
  8. 【你问我答】机器学习遇到问题了?尽管问,我们负责解答!
  9. android 硬编码h264,windows 平台 ffmeg h264 硬编码
  10. www.5dkb.com我的电影网站