如何在PyQt5中实现QLineEdit文本持久化,关闭窗口后保留内容
实现PyQt5 QLineEdit内容的持久化保存
这是个很常见的需求,其实实现起来非常简单,核心就是把用户输入的内容保存到本地配置文件,下次启动时读取并填充回去。我给你一个完整的可运行示例,用PyQt5结合configparser来实现,同时考虑了PyInstaller打包后的路径问题:
完整代码示例
import sys import os from configparser import ConfigParser from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QLineEdit, QPushButton, QVBoxLayout) class MyMainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("记住输入内容的Demo") self.setGeometry(100, 100, 400, 200) # 初始化UI组件 self.init_ui() # 配置文件存放在用户主目录的隐藏文件夹中,避免权限问题和文件混乱 self.settings_dir = os.path.expanduser("~/.my_app_config") self.settings_file = os.path.join(self.settings_dir, "app_settings.ini") # 程序启动时加载之前保存的内容 self.load_settings() def init_ui(self): central_widget = QWidget() self.setCentralWidget(central_widget) layout = QVBoxLayout(central_widget) # 创建需要保存内容的QLineEdit self.line_edit1 = QLineEdit() self.line_edit1.setPlaceholderText("输入内容1") layout.addWidget(self.line_edit1) self.line_edit2 = QLineEdit() self.line_edit2.setPlaceholderText("输入内容2") layout.addWidget(self.line_edit2) # 示例按钮(你可以替换成自己的功能按钮) self.btn = QPushButton("点击测试") layout.addWidget(self.btn) def load_settings(self): # 如果配置目录不存在,自动创建 if not os.path.exists(self.settings_dir): os.makedirs(self.settings_dir) config = ConfigParser() # 读取配置文件:如果文件存在就读取,不存在则创建默认配置 if os.path.exists(self.settings_file): config.read(self.settings_file) # 填充QLineEdit内容,fallback参数确保没有对应键时显示空字符串 self.line_edit1.setText(config.get("UserInputs", "input1", fallback="")) self.line_edit2.setText(config.get("UserInputs", "input2", fallback="")) else: # 创建默认配置文件 config["UserInputs"] = { "input1": "", "input2": "" } with open(self.settings_file, "w") as f: config.write(f) def save_settings(self): # 把当前QLineEdit的内容写入配置文件 config = ConfigParser() config["UserInputs"] = { "input1": self.line_edit1.text(), "input2": self.line_edit2.text() } with open(self.settings_file, "w") as f: config.write(f) def closeEvent(self, event): # 重写窗口关闭事件,确保关闭时自动保存内容 self.save_settings() # 允许窗口关闭 event.accept() if __name__ == "__main__": app = QApplication(sys.argv) window = MyMainWindow() window.show() sys.exit(app.exec_())
关键部分解释
配置文件路径选择:
我把配置文件放在用户主目录的隐藏文件夹~/.my_app_config下,这样做的好处是:- 避免程序安装在系统盘(如C盘)时的权限问题
- 不会污染用户的桌面或文档目录
- 打包后的程序在任何电脑上运行都能正确找到配置位置
加载配置:
load_settings方法在程序启动时执行,会检查配置文件是否存在:- 不存在则创建默认配置
- 存在则读取内容并填充到对应的QLineEdit中
保存配置:
通过重写closeEvent方法,在用户关闭窗口时自动调用save_settings,把当前QLineEdit的内容写入配置文件,确保内容不会丢失。
可选:用JSON格式存储
如果你更习惯JSON格式,可以把configparser替换成json模块,修改load_settings和save_settings方法即可:
import json # 修改后的load_settings def load_settings(self): if not os.path.exists(self.settings_dir): os.makedirs(self.settings_dir) if os.path.exists(self.settings_file): with open(self.settings_file, "r") as f: settings = json.load(f) self.line_edit1.setText(settings.get("input1", "")) self.line_edit2.setText(settings.get("input2", "")) else: default_settings = {"input1": "", "input2": ""} with open(self.settings_file, "w") as f: json.dump(default_settings, f) # 修改后的save_settings def save_settings(self): settings = { "input1": self.line_edit1.text(), "input2": self.line_edit2.text() } with open(self.settings_file, "w") as f: json.dump(settings, f)
PyInstaller打包注意事项
打包时直接用常规命令即可,不需要额外处理配置文件(因为配置文件是程序运行时自动生成的):
pyinstaller --onefile --windowed your_script_name.py
内容的提问来源于stack exchange,提问作者user9510595
相关产品推荐
相关产品推荐

