效果
每次打开Pyqt5打包后的程序,默认显示的是上一次的结果
例如下图的 文件路径、表名、类型等
大致的思路
Pyqt5自带的方法QSettings实现保存上一次的设置,其思路是读取ini文件,如果不存在就是程序的初始状态,如果存在则可以读取ini文件里面的内容,开发者可将读取的内容绑定至具体的控件上,实现每一次运行程序,都是加载上一次的状态
关键在于:需要开发者选择将哪些状态进行保存和加载
用法
导入包
from PyQt5.QtCore import QSettings
初始化
QSettings('myapp.ini', QSettings.IniFormat)
class MyMainForm(QMainWindow, Ui_DownloadImages):
def __init__(self, parent=None):
super(MyMainForm, self).__init__(parent)
self.setupUi(self)
self.settings = QSettings('myapp.ini', QSettings.IniFormat)
保存结果
self.settings.setValue(key, value)
input_data = {
"file_path": "具体的数据",
"new_dir_path": "具体的数据",
"col_list": "具体的数据",
"sheet_name": "具体的数据",
'img_width': "具体的数据",
'img_height': "具体的数据",
"write_to_excel": "具体的数据",
"write_to_dir": "具体的数据",
"use_agent": "具体的数据",
}
for key, value in input_data.items():
self.settings.setValue(key, value)
程序会在py文件的同级目录下生一个ini文件,执行上面的代码时,就会将对应数据写入这个ini文件
加载文件
self."具体的控件".setText(self.settings.value(key, value))
# 初始化信息
def init_info(self):
# 加载上一次的结果
self."具体的控件".setText(self.settings.value('sheet_name', ""))
self."具体的控件"t.setText(self.settings.value('file_path', ""))
self."具体的控件".setText(self.settings.value('new_dir_path', ""))
self."具体的控件".setText(self.settings.value('img_width', "75"))
self."具体的控件".setText(self.settings.value('img_height', "75"))
col_list = self.settings.value('col_list', [])
通常会使用一个函数实现加载上一次结果的功能,在程序运行时,执行这个函数即可
补充
这里给出几个比较常用的控件绑定方式
复选框
由于复选框的值,在后端接收的True或False,但是写入文件确实字符串格式的true或false,所以需要进行格式转化,将字符串转为对应的值
write_to_excel = self.settings.value('write_to_excel', True)
write_to_excel = True if write_to_excel == 'true' or write_to_excel != "false" else False
self.writeExcelCheckBox.setChecked(write_to_excel)
listWidget
listwidget对象其是一个一个item,所有通过列表的方式,将每一个值都添加进listwidget中
col_list = self.settings.value('col_list', [])
for col_name in col_list:
self.listWidget.addItem(col_name)