男人互做网站/电商网页
1、我们将使用XML来保存配置文件,我们将存储串口的设置,python的xml操作库有很多,我们直接使用官方库xml.etree.ElementTree
2、我们在pythonwork新建一个xmlreadandwrite.py,我们希望在程序中实现,启动过程中如果读到设置的xml文件,就自动配置串口,那我们的库需要实现两个功能:
1)传入配置的字典,生成xml保存在本地;
2)传入配置文件的路径,返回配置的串口信息。
由此来设计我们xml读写函数。
Xml的格式,先定义
我们定义的根元素为com,其它为set的内容,结合文档,代码写成如下:
def WriteXml(sl):
root=ET.Element("com")
for e in sl.keys():
l=ET.SubElement(root,"set")
l.attrib={'name':e,'value':sl[e]}
tree = ET.ElementTree(root)
tree.write("setmsg.xml")
我们输入sl的字典,格式与串口设置界面传递来的信号内容一致:
{'com': 'COM1', 'bsp': '115200', 'd': '8', 'p': 'NONE', 's': '1'}
我们来调用下代码:
sl={'com': 'COM1', 'bsp': '115200', 'd': '8', 'p': 'NONE', 's': '1'}
WriteXml(sl)
运行一下,在根目录生成了一个setmsg.xml的文档。

生成的xml文件:

打开xml文件看下格式:

与我们的设想一致,接着来读取xml文件,将读取的xml,以字典的形式返回,代码如下:
def ReadXml(spath):
root=ET.parse(spath)
p=root.findall('.')
xmllist={}
for oneper in p:
for child in oneper.getchildren():
xmllist[child.attrib['name']]=child.attrib['value']
return xmllist
输入调用代码:
spath="setmsg.xml"
print(ReadXml(spath))
运行一下:

这样我们就实现了xml的读写。
最终代码如下:

3、切回uartform.py,在文件头引入:from xmlreadandwrite import WriteXml,ReadXml
在initdata增加:
try:
self.sl=ReadXml('setmsg.xml')
self.callcw(self.sl)
except Exception as e:
self.ShowMsg(str(e))
运行一下代码:

这样我们就实现了程序启动自动设置串口并打开。
接着我们来实现,将配置更新到xml文件中,在callcw增加一个参数默认b=0,我们在callcw增加代码:
if b==0:
WriteXml(msg)
完整代码如下:

将最开始的读取XML的代码更改为:self.callcw(self.sl,b=1)
运行一下代码:

改变一下波特率为9600:

点击确定:

查看xml文件:

已经做了相应的变化,我们在读取配置文件的时候顺便把配置载入串口设置界面中,增加函数:
def set_com(self,msg):
try:
com=msg['com']
bsp=msg['bsp']
d=msg['d']
s=msg['s']
p=msg['p']
self.new.cb_com.setCurrentText(com)
bsp=self.new.cb_bsp.setCurrentText(bsp)
d=self.new.cb_data.setCurrentText(d)
p=self.new.cb_p.setCurrentText(s)
s=self.new.cb_stop.setCurrentText(p)
except Exception as e:
print(e)
在uartform.py的showcw中添加代码如下:

运行一下:

点开设置串口:

好的,我们本节课完成保存设置与读取设置,下节课将完成log读写的功能。