当前位置: 首页 > news >正文

采用Python中Tkinter模块的Treeview 组件显示xml文件

  xml内容属于层次结构,也可以是Treeview组件显示内容,本文仿照《采用Python中Tkinter模块的Treeview 组件显示ini文件》,学习使用Treeview 组件显示xml文件内容。
  本文中采用的主要功能点包括:

  • 选择文件:采用tkinter.filedialog.askopenfilename选择本地文件;
  • 解析xml文件:采用xml.etree.ElementTree模块解析xml文件,通过调用ShowSubElement函数递归解析每个元素的内容、属性及下级节点。;
  • Treeview 组件:将解析出的每个元素的内容、属性及下级节点按层次结构创建数据记录、指定父子节点,由于每个元素的属性不同,为便于展示,按键值形式纵向展示节点的内容和属性列表。

  全部代码及运行效果如下所示:

# coding=gbk

import tkinter as tk
from tkinter import ttk
import xml.etree.ElementTree as ET
from tkinter.filedialog import askopenfilename

def ShowSubElement(tree,curNode,curElement,level):
    node = tree.insert(curNode, tk.END, text='Level'+str(level)+':'+curElement.tag,open=True)

    eleText=curElement.text    
	
    if not eleText is None and len(eleText)>0:
        tree.insert(node,tk.END,text='',values=('内容','',eleText))
        
    for attr in curElement.attrib:
        print(attr)
        tree.insert(node,tk.END,text='',values=('属性',attr,curElement.get(attr)))
        
    print(level,' tag:',curElement.tag,'attribute:', curElement.attrib,'text:',curElement.text)
    for child in curElement:
        ShowSubElement(tree,node,child,level+1)

def BrowseDri():
    txtFilePath.set(askopenfilename())
    tree = ttk.Treeview(window, height = 15, selectmode = "extended",columns=('type','key', 'value'), show="tree headings", displaycolumns="#all")
    tree.grid(row=1,column=1)
    tree.heading("#0", text="元素", anchor=tk.W)
    tree.heading('type', text="类型", anchor=tk.W)
    tree.heading('key', text="名称", anchor=tk.W)
    tree.heading('value', text="值", anchor=tk.W)
    tree.column('#0', width=150)
    tree.column('type', width=100)
    tree.column('key', width=100)
    tree.column('value', width=100)

    treeviewroot = tree.insert("", tk.END, text="xml文件",open=True)

    xmltree = ET.parse(txtFilePath.get())
    level=1
    root = xmltree.getroot()
    ShowSubElement(tree,treeviewroot,root,level)
    print('readed xml file')

window=tk.Tk()
window.title('浏览xml文件夹')
window.geometry('600x400')

tk.Button(window,text='选择文件',command=BrowseDri).grid(row=0,column=0)
txtFilePath=tk.StringVar()
tk.Entry(window,textvariable=txtFilePath).grid(row=0,column=1)

tk.Label(window,text='文件内容').grid(row=1,column=0)

window.mainloop() 

在这里插入图片描述

参考文献:
[1]https://docs.python.org/3/library/tkinter.ttk.html?highlight=treeview#treeview
[2]https://blog.csdn.net/m0_59485658/article/details/123334710
[3]https://www.cnblogs.com/akxmhd/p/15371797.html
[4]https://blog.csdn.net/weixin_45558166/article/details/122079072

相关文章:

  • synchronized的实现原理与应用
  • 网上商城之支付
  • 一次搞懂Java如何调用Kotlin的高级特性
  • MyBatis各种SQL操作及执行添加功能获取自增的主键
  • 【学习笔记】模拟赛题解
  • node.js 使用教程-3.gulp-file-include 详细教程
  • 【可视化大屏教程】用Python开发智慧城市数据分析大屏
  • 【云原生 | 从零开始学Kubernetes】二十三、Kubernetes控制器Statefulset
  • git三板斧--Linux
  • 内存分配.
  • 谷粒商城超详细笔记+踩坑(2)——分布式组件、前端基础(回顾知识点)
  • 为 TiDB 客户端服务端间通信开启加密传输
  • C语言函数解决问题:1.求二进制中不同位的个数;2.交换二进制的奇数位和偶数位;3.使用指针打印数组内容
  • PyQT5入门案例(一)工资统计系统
  • Life:歌曲学习之教一个不会唱歌的人学会唱出《情非得已》、《海阔天空》、《红日》、《老男孩》等歌曲
  • 30秒的PHP代码片段(1)数组 - Array
  • C++类中的特殊成员函数
  • express.js的介绍及使用
  • go语言学习初探(一)
  • Java多态
  • js操作时间(持续更新)
  • JS专题之继承
  • leetcode386. Lexicographical Numbers
  • React-生命周期杂记
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • vue--为什么data属性必须是一个函数
  • WePY 在小程序性能调优上做出的探究
  • 百度小程序遇到的问题
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 基于axios的vue插件,让http请求更简单
  • 看域名解析域名安全对SEO的影响
  • 浏览器缓存机制分析
  • 我的业余项目总结
  • 我有几个粽子,和一个故事
  • 消息队列系列二(IOT中消息队列的应用)
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 因为阿里,他们成了“杭漂”
  • ​马来语翻译中文去哪比较好?
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (数据结构)顺序表的定义
  • (四)图像的%2线性拉伸
  • (算法二)滑动窗口
  • (图)IntelliTrace Tools 跟踪云端程序
  • (未解决)macOS matplotlib 中文是方框
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 解决重复提交问题
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET6 命令行启动及发布单个Exe文件