1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Ubuntu写python脚本实现自定义壁纸幻灯片:Vue法 字符串拼接法 minidom法

Ubuntu写python脚本实现自定义壁纸幻灯片:Vue法 字符串拼接法 minidom法

时间:2020-05-09 09:19:18

相关推荐

Ubuntu写python脚本实现自定义壁纸幻灯片:Vue法 字符串拼接法 minidom法

文章目录

环境配置文件何在配置文件写法脚本Vue也可以很方便地生成xml字符串拼接版minidom版

环境

Windows10、虚拟机Ubuntu20.04

本文juejin:/post/7129080519945355277/

本文52pojie:/thread-1672344-1-1.html

本文CSDN:/hans774882968/article/details/126215309

作者:hans774882968以及hans774882968

配置文件何在

查阅资料可知,控制壁纸幻灯片的文件是:/usr/share/backgrounds/contest/focal.xml

如果权限不够,就修改一下:

sudo chmod 777 focal.xml

配置文件写法

原有内容结构如下:

<background><starttime><year></year><month>04</month><day>01</day><hour>00</hour><minute>00</minute><second>00</second></starttime><!-- This animation will start at midnight. --><!-- 剩下的是主体部分,省略 --></background>

观察原有内容,我们归纳得出,控制一张图片的xml如下:

<static><duration>25.0</duration><file>/home/xxx/图片/壁纸1.png</file></static><transition><duration>2.0</duration><from>/home/xxx/图片/壁纸1.png</from><to>/home/xxx/图片/壁纸2.png</to></transition>

因此,我们只需要提供:static持续的时间、transition持续的时间(均以秒为单位)、当前图片和下一张图片。

脚本

Vue也可以很方便地生成xml

传送门

字符串拼接版

关于脚本:

file_template.xml的主体部分,用%s表示。求好主体部分imgs_xml后,用file_template % imgs_xml来添加。注意编码指定为utf-8。这种直接拼接字符串的方式保证缩进完全正确是比较麻烦的。可以试试用minidom再实现一次,对比实现难度。

使用时:

只需要修改files数组。运行完毕,文件生成后,自行替换/usr/share/backgrounds/contest/focal.xml的原有内容。修改后不会立刻生效,目前我是用重启解决这个问题的。如果能找到对应的进程,手动重启它,就更好了。

def get_file_template():import systry:with open('file_template.xml', 'r', encoding='utf-8') as f:return f.read().strip()except Exception as e:print(e)sys.exit(-1)def get_imgs_xml():static_duration = 25.0transition_duration = 2.0files = [# 你的图片的绝对路径,如'/home/xxx/图片/1.png']one_img_template = '''<static><duration>{static_duration}</duration><file>{cur_path}</file></static><transition><duration>{transition_duration}</duration><from>{cur_path}</from><to>{next_path}</to></transition>'''.lstrip('\n')a = []for i, cur_path in enumerate(files):next_path = files[(i + 1) % len(files)]a.append(one_img_template.format(cur_path=cur_path, next_path=next_path,static_duration=static_duration,transition_duration=transition_duration))return ''.join(a)if __name__ == '__main__':file_template = get_file_template()imgs_xml = get_imgs_xml()content = file_template % imgs_xmlwith open('focal.xml', 'w', encoding='utf-8') as f:f.write(content)

minidom版

命令式地操作xml,不符合直觉,感觉更难写!

from xml.dom.minidom import Documentdef txt_node(txt):return doc.createTextNode(str(txt))def sub_node(name, text):txt_nd = txt_node(text)node = doc.createElement(name)node.appendChild(txt_nd)return nodedoc = Document()root = doc.createElement('background')doc.appendChild(root)start_time = doc.createElement('starttime')time_arr = [('year', ''), ('month', '04'), ('day', '01'),('hour', '00'), ('minute', '00'), ('second', '00')]for t in time_arr:txt = txt_node(t[1])t_node = doc.createElement(t[0])t_node.appendChild(txt)start_time.appendChild(t_node)root.appendChild(start_time)static_duration = 25.0transition_duration = 2.0files = [# 你的图片的绝对路径,如'/home/xxx/图片/1.png']for i, cur_path in enumerate(files):# static nodenext_path = files[(i + 1) % len(files)]duration_node = sub_node('duration', static_duration)file_node = sub_node('file', cur_path)static_node = doc.createElement('static')static_node.appendChild(duration_node)static_node.appendChild(file_node)# transition nodeduration_node = sub_node('duration', transition_duration)from_node = sub_node('from', cur_path)to_node = sub_node('to', next_path)transition_node = doc.createElement('transition')transition_node.appendChild(duration_node)transition_node.appendChild(from_node)transition_node.appendChild(to_node)root.appendChild(static_node)root.appendChild(transition_node)with open('focal_minidom.xml', 'w', encoding='utf-8') as f:f.write(doc.toprettyxml(indent=' ', encoding='utf-8').decode('utf-8'))

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。