You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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_())

关键部分解释

  1. 配置文件路径选择:
    我把配置文件放在用户主目录的隐藏文件夹~/.my_app_config下,这样做的好处是:

    • 避免程序安装在系统盘(如C盘)时的权限问题
    • 不会污染用户的桌面或文档目录
    • 打包后的程序在任何电脑上运行都能正确找到配置位置
  2. 加载配置:
    load_settings方法在程序启动时执行,会检查配置文件是否存在:

    • 不存在则创建默认配置
    • 存在则读取内容并填充到对应的QLineEdit中
  3. 保存配置:
    通过重写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:54:05