WallpaperGetter的面向对象和GUI版,python大作业的延续
-
包内模块引入时,就拿FilenameManager包来说,在TextFile内引入RecordLine可选的方式有两种:第一种引入方式适合引入模块(文件)内所有对象,第二种引入方式则适合模块内只有一个单独的类:
from FilenameManager import RecordLine
# 该方式未直接将RecordLine类引入,而是引入了RecordLine文件模块,具体使用时,需要RecordLine.RecordLinefrom FilenameManager.RecordLine import RecordLine
# 该方法直接将RecordLine类引入,构造时可以直接使用RecordLine()from FilenameManager.RecordLine import *
# 该方法可以将模块内文件全部以独立的形式引入,可以直接使用而不必加模块名
-
连接数据库时,如果失败,注意检查各项参数是不是传成了别的参数,比如:
username
错传成database_name
-
嵌入式SQL语句中如果有字符串必须用
""
括起来,不然会报语法错误 -
在
pipenv
虚拟环境下,使用pyqt5
运行会出现提示:This application failed to start because no QT platform plugin could be initialized. Reinstalling the application may fix this problem.
,可能的解决方案- 最直接的解决办法是使用系统环境,只要正确安装应该都不会有问题(本人测试可行)
- 网上很多都说要复制
plugins
或platform
文件夹中的内容拷贝到另外一个地方(本人测试无效) - 再安装
pyqt5-tools
,这个应该是针对那些没有安装全套QT的人(但是本人测试仍然不行) - 再安装
pyqt5-stubs
,这个咱也不知道是干嘛的,然后添加环境变量(本人测试不可行)
-
python
超类不能导入子类模块,子类模块也不能互相导入,测试情况均是一个模块占用一个文件的情况,其他情况有待测试 -
在
settings.json
增加了文件中增加了UnusedIdentityAndNumber
成员后总是无法正常写入设置表现为:
- 第一次写入设置正常
- 第二次写入设置正常,但会在设置末尾多出一个
}
或]\n }
- 之后再进行设置就会异常退出
原因:
文件写入打开方式设置为了
r+
,该模式下如果部分更新设置会出现问题 -
在单元格中放入了控件,如何使控件居中
- 新建一个控件
- 新建一个布局
- 将欲居中的单元格控件加入布局中
- 设置
1.
中的控件的布局为2.
中的布局 - 将
1.
中控件压入单元格即可
代码如下
def __set_widget_style(self, widget): temp = QWidget() layout = QHBoxLayout() layout.addWidget(widget) temp.setLayout(layout) temp.setFont(self.__tableOperationFont) return temp
-
从当前遍历的列表中删除元素时,注意使用倒序遍历方式删除
-
善用信号与槽
-
刷新表格时,注意考虑现有表格的行数和刷新后表格的行数,否则可能会看不到刷新的效果
-
新发现的
python
的特性,在类内部使用get方法,如果数据不经处理直接返回,效果类似于返回该属性的地址,相当于直接暴露了类的参数(即使该参数是私有的)。由于这个特性,再次被占用的未使用到的id
和num
,因为在ImageCopier
中使用了pop
方法获取元素,所以间接解决了这个更新问题。 -
在完善了
num
的更新问题之后,unused_id_num
的更新出现了问题,这是因为如果获取图片过程中仅使用了unused_id_num
,那么numCounter
的值就为[0, 0]
,在更新num
时,不会进入SettingsAnalyser.refresh_number
第一个条件语句内部,没有刷新文件,所以没能正常更新unused_id_num
。 -
修复了一个小
Bug
,是由Python
的特性引发的:Python
函数的默认参数的值在运行时不会随着时间而改变,除非再次运行,这便是获取日期不准确的原因 -
在实现查看全部数据倒序显示时,注意到预览壁纸的逻辑使用了被单击的单元格而不是
MyQLabel
的row
属性,已使用mouseReleaseEvent
重载结合自定义信号解决了该问题 -
在数据量逐渐大了起来之后发现文件的原始名称并不能唯一区分一张壁纸,故可以考虑采用文件的
hash
值来区分不同的文件
可以参考提交的总的文档中的两个测试类
- 常驻后台
- 常驻后台获取壁纸后发出通知
- 后台模式获取通知的频率可以设置,表现为获取壁纸的数量
- watchdog监控文件夹内容变化
- 后台模式和前台模式表现的区别,表现为是否有主程序
- settings.json设置项更新
- Controller似乎不必全是静态方法,加以优化尝试
- 尝试添加一个近期获取的壁纸旧名称,提升查询效率
- 在长期不能获取图片时,提醒用户Windows聚焦可能出现了问题
- 尝试记录用户不喜欢的图片,防止以后再次获取
- 尝试通过统计新增图片的壁纸更新日期来动态更新自动获取壁纸的时间
- 倒序显示查看记录结果
- 尝试使用图片的hash值区分图片,需要对数据库设计进行变更
- 增添一个hash值的列
- 当检查到相同hash值的文件时,提示用户本次旧文件名称和库中已存储的旧文件名称
- 在使用查看记录的功能时,使用多线程或者分页加载来提升程序的加载速度