面向客户的工具软件通常需要响应的图形界面,由于对Qt较为熟悉,因此使用PyQ来搭建
区别于matlab中采用的回调函数形式,信号槽模型能够更好的去除耦合性
定义:process_sig = QtCore.pyqtSignal(int)
连接:self.thread.process_sig.connect(self.update_process)
发出信号:self.process_sig.emit(index)
由于dwg文件解析是一个相对耗时的任务,在批量处理时尤其如此,因此在界面中增加进度条。同时带来新的问题——耗时任务进行时界面处于卡死状态,无法操作,进度条也不能正常显示,因此需要分出界面进程与处理进程。
python多线程的库例如threading,由于是结合Qt使用,因此选择Qthread。
所有语言都可以认为是信息的编码规则的,编程语言也是。而所谓的编码方式都可以认为是字符码到字节码的映射关系。
Unicode为世界上所有语言的字符都分配了一个序号,由于字符的数量很多,这个序号需要使用双字节16位。
如果直接将这个序号作为字节码映射,必然造成大量空间浪费,不同字符的使用频率相差很大,使用频率较高的字符理应使用较短的编码。
utf8因此采用变长码的方式,兼顾了容量与效率,是python3的默认编码方式
python中有str与bytes两种类型,decode与encode分别用于正向与反向转换
在使用赋值符号"="创建字符串对象时,会自动调用encode函数
lxml: https://lxml.de/(需要fq) 对xpath完全支持。
xpath表达式可以快速定位DOM树中的元素
表达式 | 描述 |
---|---|
nodename | 选取此节点的所有子节点。 |
/ | 从根节点选取。 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
. | 选取当前节点。 |
.. | 选取当前节点的父节点。 |
@ | 选取属性。 |
通配符 | 描述 |
---|---|
* | 匹配任何元素节点。 |
@* | 匹配任何属性节点。 |
node() | 匹配任何类型的节点。 |
轴名称 | 结果 |
---|---|
ancestor | 选取当前节点的所有先辈(父、祖父等)。 |
ancestor-or-self | 选取当前节点的所有先辈(父、祖父等)以及当前节点本身。 |
attribute | 选取当前节点的所有属性。 |
child | 选取当前节点的所有子元素。 |
descendant | 选取当前节点的所有后代元素(子、孙等)。 |
descendant-or-self | 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。 |
following | 选取文档中当前节点的结束标签之后的所有节点。 |
namespace | 选取当前节点的所有命名空间节点。 |
parent | 选取当前节点的父节点。 |
preceding | 选取文档中当前节点的开始标签之前的所有节点。 |
preceding-sibling | 选取当前节点之前的所有同级节点。 |
self | 选取当前节点。 |
示例
.//tag[@att1='属性1' and text()='内置文本']/subtag
/bookstore/book[price>35]/title
/bookstore/book[position()<3] | //price
descendant::book #选取当前节点的所有 book 后代。
re: https://docs.python.org/zh-cn/3/library/re.html
替换 text = re.sub(re_str, text)
匹配 re.search(re_str, text).group(1) # group从1开始计数
打包好的软件的存储空间占用自然是越小越好,利用pyinstaller打包的软件大小与包含的库息息相关。
例如,Pyqt库对应30M,pandas/numpy等科学运算库会占用比较大的空间,一般在60M左右。
有人指出使用pipenv虚拟环境打包的软件可以去除原生python环境中不需要的内容,经过测试确实能减小软件体积,但是差距不大(1M左右)。
原文:https://www.cnblogs.com/lyricode/p/12383484.html