使用python的tkinter编写一个界面,例子如下:能够通过xml标准库读写xml文件:country.xml中指定国家的rank和year属性。

country.xml结构如下:
<data>
	<country name="Panama">
	<rank>67</rank>
	<year>20142</year>
	<gdppc>13600</gdppc>
	<neighbor direction="W" name="Costa Rica" />
	<neighbor direction="E" name="Colombia" />
</country>
</data>

思路:将解析xml文件的代码封装为类,注意界面的布局情况,可以使用Label和Entry等界面组件的grid函数。

import tkinter as tk
import xml.etree.ElementTree as ET

class App:
    """

  点击get按钮时

       根据用户输入的国家名判断是否时xml文件里面存在的name,若是则返回行营的rank和year值

    点击set按钮时

       将用户输入的数据按原格式存入xml文件

  
    def __init__(self, root):
        # 基本界面
        self.root = root
        # 所需组件
        self.zujian()

    def zujian(self):
        # 用标签label存放固定的数据,用文本框entry存放可变数据,并用grid固定他们的位置
        # set和get用按钮button来创建,再用bind设置他们的响应机制
        # 国家name,
        tk.Label(self.root, text="country:", height=1,
                 width=10).grid(row=0, column=0)
        self.e1 = tk.StringVar()
        self.e11 = tk.Entry(self.root, width=50, textvariable=self.e1)
        self.e11.grid(row=0, column=1)

        # rank
        tk.Label(self.root, text="rank:", height=1,
                 width=10).grid(row=1, column=0)
        self.e2 = tk.IntVar()
        self.e22 = tk.Entry(self.root, width=50, textvariable=self.e2)
        self.e22.grid(row=1, column=1)

        # year
        tk.Label(self.root, text="year:", height=1,
                 width=10).grid(row=2, column=0)
        self.e3 = tk.IntVar()
        self.e33 = tk.Entry(self.root, width=50, textvariable=self.e3)
        self.e33.grid(row=2, column=1)
        # get
        b = tk.Button(root, text="get", height=1, width=15)
        b.grid(row=3, column=0)
        b.bind("<Button-1>", self.click)
        # set
        c = tk.Button(root, text="set", height=1, width=15)
        c.grid(row=3, column=1)
        c.bind("<Button-1>", self.clean)

    def click(self, event):
        # 点击get按钮的响应机制
        tree = ET.parse('zuoye/country.xml')  # 创建xml树
        root1 = tree.getroot()    # 得到树根
        for country in root1.findall('country'):  # 循环遍历子节点country
            
            # 判断name是否和用户输入的一致,若一致则输出他们的rank和year的值
            if country.get('name') == self.e11.get():   # 子节点下属性name的值
                self.e1.set(country.get('name'))
                self.e2.set(country.find('rank').text)  # 子节点下节点rank的值
                self.e3.set(country.find('year').text)

    def clean(self, event):
        # 点击set按钮的响应机制
        # 写入xml
        tree = ET.parse('zuoye/country.xml')  # 创建xml树
        root1 = tree.getroot()    # 得到树根
        # 创建新的子节点
        countrynew = ET.Element('country', {'name': self.e11.get()})
        ranknew = ET.SubElement(countrynew, 'rank')   # 子节点下节点rank
        ranknew.text = self.e22.get()
        yearnew = ET.SubElement(countrynew, 'year')
        yearnew.text = self.e33.get()
        # 向根节点添加新的子节点,可以使用append方法添加子节点
        root1.append(countrynew)
        # 写入
        tree.write('zuoye/country.xml', encoding="utf-8", xml_declaration=True)

root = tk.Tk()
root.title("XML")
App(root)
root.mainloop()

 结果:

输入name后:

点击get后:

填入数据:

点击set后:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

粉尘伴终生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值