python窗口显示表格_Python tkinter Treeview创建GUI表格(可编辑、新建单元格)
版本: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表格(可编辑、新建单元格)相关推荐
- 树回归--python Tkinter库创建GUI(2)
简单的Tkinter库创建GUI的例子可参考: http://blog.csdn.net/lilong117194/article/details/78456376 下面是代码: # -*- codi ...
- python3-xlwt-Excel设置表格基础(字体颜色 背景颜色 设置边框 边框颜色 冻结窗口 字体大小 字体高度 字体加粗 下划线 斜体字 单元格对齐方式 自动换行 删除线 超链接 插入公式)
文章目录 引入xlwt和创建workboos对象 初始化样式和创建设置字体,赋值给style 保存文件 自定义样式 字体颜色 背景颜色 设置边框 边框颜色 冻结窗口 字体大小 字体高度 字体加粗 下划 ...
- excel 单元格如何获取textbox中的值 java,把excel表格数据定义为文本框-excel中如何将单元格里的数值显示在文本框(textbox)里...
excel中如何将单元格里的数值显示在文本框(textbox)里 sheets("Sheet2").range("b3")=textbox ---------- ...
- Excel表格中多个文本内容快速合并到一个单元格内
Excel表格中多个文本内容快速合并到一个单元格内 目录 Excel表格中多个文本内容快速合并到一个单元格内 1.在合并单元格内输入"=PHONETIC()"函数 2.框选需要合并 ...
- 成功解决在excel表格中仅在某列内插入一个空白单元格,使其下部的数据整体下移一格
成功解决在excel表格中仅在某列内插入一个空白单元格,使其下部的数据整体下移一格 目录 解决问题 解决方法 解决问题 在excel表格中仅在某列内插入一个空白单元格,使其下部的数据整体下移一格 解决 ...
- python窗口显示表格_Python爬虫之GUI图表
关于Python爬虫系列的这篇文章我很早就想写了,但由于我前两周一直在研究vscode插件开发方面,就没去写文章.所幸目前vscode插件开发的知识了解的差不多了,是时候写了,哈哈.需要说明的是,我并 ...
- python提示对话框自动关闭_Python - tkinter:打开和关闭对话框窗口
我是Python新手,必须编写一个简单的GUI程序,为了简单起见,我选择在tkinter中这样做. 我想要的GUI应该非常类似于在Windows上安装程序时经常遇到的对话框(您想要安装的位置,您想要的 ...
- python xlsx 样式 谷歌开源 样式_python XlsxWriter模块创建aexcel表格
安装使用pip install XlsxWriter来安装,Xlsxwriter用来创建excel表格,功能很强大,下面具体介绍: 1.简单使用excel的实例: #coding:utf-8 impo ...
- 基于tkinter模块创建GUI程序(python)
文章目录 前言 一.Tkinter是什么? 二.使用步骤 1.创建应用程序的主窗口对象(根窗口) 2.tkinter根窗口 3.组件拼图 4.Label标签 布局管理系统 5.pack布局管理器 6. ...
最新文章
- LeetCode--046--全排列(java)
- metasploit快速入门(一)安装部署
- 关于Remoting信道的通信的问题
- Bootstrap 4:如何使顶部固定的Navbar保持在容器中而不拉伸?
- Ubuntu中的密钥环密码与登陆密码不同
- 7-15 城市间紧急救援 (10 分)
- android studio生产签名文件,Android Studio生成keystore签名文件步骤讲解
- IIS7.5 在已有的WEB网站上配置FTP发布
- 微软新开源!不用写 1 行代码的自动化测试工具
- python做接口测试的优点_python做接口测试的必要性
- 二极管区分极性以及驱动原理
- 任意文件夹下打开cmd窗口
- oracle表修改语句怎么写,Oracle修改表结构语句
- Dubbo分布式系统架构实战视频教程[基础篇高级篇高可用架构]
- c++ 控制台游戏打砖块
- 敏捷开发绩效管理之四:为团队设立外部绩效目标(目标管理,外向型绩效)
- win7下的cmd窗口可以全屏显示吗
- 技术胖React博客实战 - 新版问题解决方式整理
- 一款高颜值开源知识管理工具
- rnnlm源码分析(六)