采用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