PyQt 记住上次打开路径

PyQt 记住上次打开路径

文件对话窗

功能函数
打开单个文件QFileDialog.getOpenFileName()
打开多个文件QFileDialog.getOpenFileNames()
打开文件夹QFileDialog.getExistingDirectory()
文件保存QFileDialog.getSaveFileName()

getOpenFileNames

getOpenFileNames函数表示打开多个文件

QtWidgets.QFileDialog.getOpenFileNames(parent=None, caption='', directory='', filter='', initialFilter='', options, QFileDialog_Options=None, QFileDialog_Option=None, *args, **kwargs)
参数描述
parent指定父控件
caption对话窗的标题
directory表示对话窗显示的目录,’‘表示程序运行的目录,’/'表示根目录
filter后缀名过滤器,比如可以只显示txt文件或者mp3文件
selectedFilter默认选择的过滤器
options对话框的参数设定

思路

控制第三个参数就可以让程序记录上一次目录
因此可以将当前文件的路径保存到一个配置文件中,下次打开程序就读取配置文件获取上一次的路径

保存配置可以使用QSettings(比较方便),另外创建QSettings后要设置编码为UTF8,否则就会出现乱码问题

代码

#coding:utf-8
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import os

class MainUi(QtWidgets.QMainWindow):

	# 界面初始化
    def __init__(self, parent=None):
		# 导入文件按钮
        self.button_load_file = QtWidgets.QPushButton('选择文件', self.main_widget)
        # 绑定事件
        self.button_load_file.clicked.connect(self.button_load_file_clicked)

    	# 创建QSettings,配置文件是tmp/.temp
		self.setting = QSettings('tmp/.temp', QSettings.IniFormat) 
		
		# 设置UTF8编码,反正保存配置文件时出现乱码
		self.setting.setIniCodec('UTF-8') 
		
		# 读取上一次的目录路径
		self.last_path = self.setting.value('LastFilePath')
		
	 	# 如果字符串为空,将路径索引到根目录
		if self.last_path is None:
		    self.last_path = '/' # 根盘符

	# 点击打开文件
    def button_load_file_clicked(self)# 设置过滤器
        format_str = ' '.join(['*.pdf']) 
        
        # 弹出打开文件的对话窗
        fname, _ = QtWidgets.QFileDialog.getOpenFileNames(self, "select pdf", self.last_path, "PDF files (%s)" % (format_str,))
        
        # 如果文件为空,取消后续指令
        if fname is None or len(fname) <= 0:
            return
            
        try:
        	#将多个文件转为列表
            self.file_path_list = [fname_item for fname_item in fname] 
            
            # 保存当前目录的路径到配置文件中,另外如果不存在'tmp/.temp'文件该函数会自动创建
            self.setting.setValue('LastFilePath', os.path.dirname(self.file_path_list[0]))
            
             # 将路径设为''程序会使用上一次的路径
            self.last_path = ''
            
        except Exception as e:
        	# 发生异常,弹窗警告 
            msg = QtWidgets.QMessageBox.warning(self, "Warning", "PDF打开失败%s" % e, buttons=QtWidgets.QMessageBox.Ok, defaultButton=QtWidgets.QMessageBox.Ok)

### Qt Designer 文件选择框的实现方法与教程 #### 1. **文件选择框概述** 在 Qt Designer 中,文件选择功能通常通过组合使用 `QPushButton` 和 `QLineEdit` 控件来实现。这种设计允许用户点击按钮打开文件对话框,并将选定路径显示在文本框中[^1]。 --- #### 2. **具体实现步骤** ##### (1)添加控件到表单 - 在 Qt Designer 的工具箱中找到并拖拽以下两个控件到表单上: - `QPushButton`: 用于触发文件选择对话框。 - `QLineEdit`: 显示所选文件的路径。 ##### (2)设置控件属性 - 对于 `QPushButton`,将其 `text` 属性设为描述性的文字,例如 `"浏览..."`。 - 对于 `QLineEdit`,可保持默认状态或者禁用编辑权限(通过勾选 `ReadOnly` 属性防止手动输入错误路径)。 --- #### 3. **编写 Python 脚本连接信号与槽** 为了使文件选择功能生效,需借助 PyQt 或 PySide 编写相应的逻辑代码。以下是完整的示例: ```python from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit, QFileDialog, QVBoxLayout class FileSelector(QWidget): def __init__(self): super().__init__() # 初始化 UI 组件 self.line_edit = QLineEdit() # 用于显示文件路径 self.button = QPushButton("浏览...") # 触发文件选择对话框 # 布局管理器 layout = QVBoxLayout() layout.addWidget(self.line_edit) layout.addWidget(self.button) self.setLayout(layout) # 连接信号与槽函数 self.button.clicked.connect(self.open_file_dialog) def open_file_dialog(self): """ 打开文件选择对话框 """ options = QFileDialog.Options() file_name, _ = QFileDialog.getOpenFileName( self, "选择文件", "", "All Files (*);;Text Files (*.txt)", options=options ) if file_name: self.line_edit.setText(file_name) # 设置选中的文件路径到 QLineEdit if __name__ == "__main__": import sys app = QApplication(sys.argv) window = FileSelector() window.show() sys.exit(app.exec_()) ``` 上述代码实现了以下功能[^3]: - 当用户点击 `QPushButton` 时,弹出标准文件选择对话框 (`QFileDialog`)。 - 用户选择文件后,返回的文件路径会被填充到 `QLineEdit` 文本框中。 --- #### 4. **扩展功能建议** 如果希望进一步增强用户体验,可以考虑以下改进措施: - 支持多种模式:除了打开单一文件外,还可启用保存文件(`getSaveFileName`)或多文件选择(`getOpenFileNames`)等功能。 - 自定义过滤器:限定只显示某些类型的文件(如 `.jpg`, `.png` 图片文件)。 - 记忆上次目录:记录最近访问过的文件夹,在下次启动时作为初始路径。 --- #### 5. **注意事项** - 如果使用的是 PyQt5,请确保安装了对应库;如果是 PySide2,则需要替换导入模块名称。 - 需要注意跨平台兼容性问题,尤其是涉及本地化字符集处理的情况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值