Fedora系统下QFileDialog.getOpenFileName为何忽略dir参数?
Fedora下DNF安装的PyQt/PySide中QFileDialog.getOpenFileName初始目录参数失效问题
问题背景
在PyQt5、PyQt6、PySide2等Qt绑定框架中,通常可通过QFileDialog.getOpenFileName的第三个参数指定打开文件对话框的初始目录:
QtWidgets.QFileDialog.getOpenFileName( self, 'Open file', '/home/michael/last_path', )
但在Fedora新版本(从Fedora 33到Fedora 37搭配Gnome 43.3均存在)中,该参数会被静默忽略,且无论Wayland还是X11环境都存在此问题。奇怪的是getSaveFileName的初始目录参数仍能正常工作,同时其他基于Python&Qt的软件(如Veusz)也出现相同情况。
已确认的关键信息
- 虚拟环境中通过pip安装的PyQt5/PyQt6版本,该功能完全正常;仅通过dnf安装的系统级版本出现问题。
- 排除了Wayland/X11环境差异的影响,两种环境下问题均存在。
原因推测
该问题大概率是Fedora的PyQt/PySide打包配置问题:
Fedora在打包Qt相关软件时,可能对Qt的文件对话框后端做了定制修改(比如强制使用GTK原生对话框),导致getOpenFileName的初始目录参数没有正确传递到原生对话框组件;而getSaveFileName的参数传递逻辑未受此修改影响,因此功能正常。
反馈渠道
- Fedora Bugzilla:针对
python-qt5、python-qt6、python-pyside2等相关包提交bug报告,详细说明环境版本、复现步骤及对比测试结果(pip vs dnf版本的差异)。 - Fedora Qt SIG:参与Fedora专门负责Qt相关软件维护的兴趣小组讨论,反馈该问题并寻求技术支持。
修复方向
临时 workaround
强制使用Qt自带的非原生文件对话框,绕过Fedora定制的原生对话框逻辑:
QtWidgets.QFileDialog.getOpenFileName( self, 'Open file', '/home/michael/last_path', options=QtWidgets.QFileDialog.DontUseNativeDialog )
长期修复
- 提交bug后跟进Fedora官方的修复进度,若已有相关bug报告可加入测试,帮助验证补丁。
- 若熟悉Fedora打包流程,可自行修改对应PyQt/PySide包的.spec文件,移除可能导致参数失效的定制补丁或配置,重新编译安装。
内容的提问来源于stack exchange,提问作者Michael Clerx
相关产品推荐
相关产品推荐

