PyQt5中检查QFileDialog不当关闭时触发两次弹窗如何解决
问题原因
getOpenFileName是QFileDialog的静态方法,调用该方法时会自动创建一个全新的QFileDialog实例,内部自动执行exec_()弹出对话框,不需要提前实例化并手动调用exec_(),两次弹出对话框就是因为先后手动执行exec_()和调用静态方法触发了两次对话框渲染。
修复方案
有两种可行写法,按需选择即可:
方案1:直接使用静态方法(普通场景推荐,代码更简洁)
不需要提前实例化QFileDialog,直接调用静态方法即可,返回值的第一个元素为选中的文件路径,为空则说明用户取消了选择:
from PyQt5 import QtWidgets as qtw # 返回值格式为 (选中的文件路径, 选中的文件过滤器) path, _ = qtw.QFileDialog.getOpenFileName(self, 'Open a file', '', 'All Files (*.*)') if path: # 路径非空说明用户选中了文件,执行后续逻辑即可 pass
方案2:实例化对象写法(需要自定义对话框配置时使用)
如果需要提前对QFileDialog做自定义配置(比如限制多选、自定义侧边栏等),可以实例化后调用exec_(),确认用户选中后直接调用selectedFiles()方法获取选中路径,不需要再调用getOpenFileName:
from PyQt5 import QtWidgets as qtw loadfile = qtw.QFileDialog(self) loadfile.setWindowTitle('Open a file') loadfile.setFileMode(qtw.QFileDialog.ExistingFile) loadfile.setNameFilter('All Files (*.*)') if loadfile.exec_() == qtw.QFileDialog.Accepted: # selectedFiles返回列表,单选场景取第一个元素即可 path = loadfile.selectedFiles()[0]
内容的提问来源于stack exchange,提问作者Oier Arcelus
相关产品推荐
相关产品推荐

